python矩阵转置

2019-07-19  本文已影响0人  JerryLoveCoding

python中的矩阵转置

首先,数据应该是np.asarray型,
然后,使用numpy.transpose来操作。


transpose方法只能处理高维数组(>1),如果处理一维数组会报错;
对于二维数组:

data1 = np.arange(4).reshape((2,2))
print(data1)
>>[[0 1]
    [2 3]]
data1 = np.transpose(data1)
print(data1)
>>[[0 2]
    [1 3]]

对于三维数组:(3,2,2)的数组对应转置为(2,2,3)

data1 = np.arange(12).reshape((3,2,2))
print(data1)
>>[[[ 0  1]
  [ 2  3]]

 [[ 4  5]
  [ 6  7]]

 [[ 8  9]
  [10 11]]]

data1 = np.transpose(data1)
print(data1)
>>[[[ 0  4  8]
  [ 2  6 10]]

 [[ 1  5  9]
  [ 3  7 11]]]

对于四维数组:(2,3,2,2)的数组对于转置为(2,2,3,2)

data1 = np.arange(24).reshape((2,3,2,2))
print(data1)
>>[[[[ 0  1]
   [ 2  3]]

  [[ 4  5]
   [ 6  7]]

  [[ 8  9]
   [10 11]]]


 [[[12 13]
   [14 15]]

  [[16 17]
   [18 19]]

  [[20 21]
   [22 23]]]]

data1 = np.transpose(data1)
print(data1)
>>[[[[ 0 12]
   [ 4 16]
   [ 8 20]]

  [[ 2 14]
   [ 6 18]
   [10 22]]]


 [[[ 1 13]
   [ 5 17]
   [ 9 21]]

  [[ 3 15]
   [ 7 19]
   [11 23]]]]

所以默认的transpose()是将数组的形状和对应的元素全部倒置。
对于有参数的transpose:对于三维数组,原型数组的参数应该是(0,1,2),对应的是外行,子行,子列,如果变成(1,0,2)就是将外行变成子行,子行变成外行。对于元素索引也发生同样改变,比如原来的元素3的索引是(0,1,1),转换后就是(1,0,1)

data1 = np.arange(12).reshape((2,3,2))
print(data1)
data2 = data1.transpose(1, 0, 2)
print(data2)
>>[[[ 0  1]
  [ 2  3]
  [ 4  5]]

 [[ 6  7]
  [ 8  9]
  [10 11]]]
>>[[[ 0  1]
  [ 6  7]]

 [[ 2  3]
  [ 8  9]]

 [[ 4  5]
  [10 11]]]
上一篇下一篇

猜你喜欢

热点阅读