Python对二维矩阵沿主对角线(次对角线)翻转变换代码实现

Python对二维数组(矩阵)沿主对角线(次对角线)翻转变换代码实现

1. 原始数据以及图示

为了展现代码的效果,这里选取了一个3*3的数组,分别是0-8的值,便于区分。为了直观展示数据,这里使用了热力图用颜色区分数值大小。关于如何绘制,参见:https://blog.csdn.net/zzu_Flyer/article/details/109309082

原始矩阵如下:
在这里插入图片描述

2. 主对角线翻转及图示

在这里插入图片描述

3. 次对角线(副对角线)翻转结果

在这里插入图片描述

4. 完整代码,如有疑问,欢迎评论区交流

import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
# 显示中文字体
from pylab import *
mpl.rcParams['font.sans-serif']=['SimHei']
# n数组维度
n = 3
my_array = np.zeros((n, n))
# 随机生成原始数组
s = 0
for i in np.arange(n):
    for j in np.arange(n):
        print(i, j)
        my_array[i, j] = s
        s = s + 1
print(my_array)


# 沿主对角线数组翻转
def fanzhuan_zhu(wind_array, nx):
    for i in range(nx):
        # print('i', i)
        for j in range(i, nx - i):
            print('--',i, j)
            tmp = wind_array[i, j]
            wind_array[i, j] = wind_array[j, i]
            wind_array[j, i] = tmp
            j = j + 1
        i = i + 1
    return wind_array


# 沿副对角线数组翻转
def fanzhuan_fu(wind_array, nx):
    for i in range(nx - 1):
        for j in range(nx - 1 - i):
            print(i, j)
            tmp = wind_array[i, j]
            wind_array[i, j] = wind_array[nx - j - 1, nx - i - 1]
            wind_array[nx - j - 1, nx - i - 1] = tmp
            j = j + 1
        i = i + 1
    return wind_array

# 绘制热力图
def show(wind_array, title):
    # 绘制热力图
    h = sns.heatmap(
        data=wind_array,  # 指定绘图数据
        cmap='YlGnBu',  # 指定填充色'PuBuGn',,jet
        # center=1,
        linewidths=.1,  # 设置每个单元格边框的宽度
        annot=True,  # 显示数值
        cbar=True,
        fmt='.1f',# 以科学计算法显示数据
    )
    plt.title(title, fontsize=15)
    plt.tight_layout()

    # 显示图形
    plt.show()


show(my_array,'原始数组')
zhu = fanzhuan_zhu(my_array, n)
print('主对角线翻转',zhu)

show(zhu, '主对角线翻转后')

fu = fanzhuan_zhu(my_array, n)
print('副对角线翻转', fu)
show(fu, '副对角线翻转后')```

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值