矩阵转置

1 问题:

对于矩阵来说,有1维,2维,3维,4维,高维。对于2维以下还好理解,比如2维就是一个面,转置就是行变列,列变行。但是对于3维来说,理解起来就比较困难。

2 二维矩阵转置:

import numpy as np
a=np.random.randint(10,size=(5,4)) #生成5*4的矩阵,矩阵的元素为整数且小于10
print(a)
'''
array([[2, 4, 5, 2],
       [4, 3, 6, 6],
       [5, 1, 4, 9],
       [5, 1, 1, 5],
       [1, 2, 5, 7]])
'''
# 对a做转置
b=a.T
print(b)
'''
array([[2, 4, 5, 5, 1],
       [4, 3, 1, 1, 2],
       [5, 6, 4, 1, 5],
       [2, 6, 9, 5, 7]])
'''

3 三维矩阵的转置

第一种情况:直接做转置,a1shape为(2,2,3),转置后变成(3,2,2)。中间维度不变

a1=np.random.randint(10,size=(2,2,3))
print(a1)
'''
array([[[8, 8, 3],
        [0, 1, 3]],

       [[9, 7, 9],
        [8, 3, 6]]])
'''
b1 = a1.T #转置
b2 = np.swapaxes(a1,0,2) #把第1个维度和第3个维度互换
b3 = np.swapaxes(a1,2,0) #把第3个维度和第1个维度互换
b4 = np.transpose(a1)    #转置
b5 = np.transpose(a1,[2,1,0]) #这里2,1,0表示下标,表示现在排列顺序是,第3维,第2维,第1维
print(b1)
print(b2)
print(b3)
print(b4)
print(b5)
'''
array([[[8, 9],
        [0, 8]],

       [[8, 7],
        [1, 3]],

       [[3, 9],
        [3, 6]]])
'''
# b1,b2,b3,b4,b5结果一样。

可以把a1看成2,个2*3矩阵,在坐标轴上是,x,y,z,x为2,y为3,z为2,保持x不变,变成3个2*3的矩阵。

黑色的框是8,红色的框也是8,黄色的框是0,绿色的框是9,为了好记,分布叫做黑8,红8,黄0,绿9。以黑8为例来分析。黑8和绿9是x维度的关系,黑8和黄0是y维的关系,黑8和红8是z维的关系。现在要干的活就是把关系从x,y,z的顺序变成,z,y,x的顺序。很明显黑8和绿9是x的关系现在要变成z的关系。像图上画的一样,交换红8和绿9的顺序。因为z维上有3个数字,就要有3个这样的2*2的矩阵。

第二种情况:前面两个维度做转置,a1的shape为(2,2,3),转置后变成(2,2,3)。最后一个维度不变。

c1 = np.swapaxes(a1,0,1)
c2 = np.swapaxes(a1,1,0)
c3 = np.transpose(a1,[1,0,2])
print(c1)
print(c2)
print(c3)
'''
array([[[8, 8, 3],
        [9, 7, 9]],

       [[0, 1, 3],
        [8, 3, 6]]])
'''
#c1,c2,c3结果一样

保持z维的方式不变,改变前两个维度。就是两个元素的关系本来是x的关系,现在变成y的关系

还是以黑8为例,绿9和黑8是x关系,黄0和黑8是y的关系,现在就相当于把绿9和黄0替换位置。其实可以发现,每个元素都有和自己有关系的元素,只要把相应的位置替换,就可以了。

第三种情况:后面两个维度做转置,a1的shape为(2,2,3),转置后变成(2,3,2)。第一个维度不变。

d1 = np.swapaxes(a1,1,2)
d2 = np.swapaxes(a1,2,1)
d3 = np.transpose(a1,[0,2,1])
print(d1)
print(d2)
print(d3)
'''
[[[8 0]
  [8 1]
  [3 3]]

 [[9 8]
  [7 3]
  [9 6]]]
'''
#d1,d2,d3结果一样

保持x维的方式不变,改变后两个维度。就是两个元素的关系本来是y的关系,现在变成z的关系。

还是以黑8为例,黄0和黑8是y关系,红8和黑8是z的关系,现在就相当于把红8和黄0替换位置。可以看出,整体的操作相当于上面一个矩阵和下面一个矩阵,分别转置。

总结:矩阵(二维数组)转置,就是把里面的元素拆分成三种关系,一般来说有需要转置两种关系,那么就互换这两者之间的位置,基本上可以知道最后的结果长什么样。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值