python_numpy中的transpose()函数

transpose函数

numpy.transpose (arr, axes)

transpose: 反转或排列数组的轴; 返回修改后的数组;对于具有两个轴的数组a,transpose(a)给出矩阵转置.

参数
arr:要操作的数组
axes(可选):整数或列表(如果指定参数,则它必须是包含所有索引的重排列; 如果不指定,则默认为反转索引的顺序)

创建一个二维数组

import numpy as np

data = np.arange(8).reshape(2,4)

print("输入数组:")
print(data)
print("数组维度:")
print(np.shape(data))

输出结果如下:

输入数组:
[[0 1 2 3]
 [4 5 6 7]]
数组维度:
(2, 4)

未指定axes,输出为矩阵的转置

二维数组正常的索引值为 (0, 1)(也就是行和列),未指定axes时,transpose()函数的作用是反转两个索引的顺序,也就是调换行和列,返回矩阵的转置

data_T = np.transpose(data)

print("转置数组:")
print(data_T)
print("数组维度:", np.shape(data_T))

输出结果如下:

转置数组:
[[0 4]
 [1 5]
 [2 6]
 [3 7]]
数组维度:
(4, 2)

二维data的索引由(0, 1)变成(1, 0),即:交换索引0和索引1的顺序,数组维度(2, 4)变成(4, 2)

指定axes=(0, 1)

没有改变索引,数组不变

data_T = np.transpose(data, (0, 1))

print("转置数组:")
print(data_T)
print("数组维度:")
print(np.shape(data_T))

输出结果如下:

输出数组:
[[0 1 2 3]
 [4 5 6 7]]
数组维度:
(2, 4)

指定axes=(1, 0)

二维data的索引由(0, 1)变成(1, 0),即:交换索引0和索引1的顺序,数组维度(2, 4)变成(4, 2)

data_T = np.transpose(data, (1, 0))

print("转置数组:")
print(data_T)
print("数组维度:")
print(np.shape(data_T))

输出结果如下:

转置数组:
[[0 4]
 [1 5]
 [2 6]
 [3 7]]
数组维度:
(4, 2)

对于一个三维数组

import numpy as np

data = np.arange(18).reshape(1, 3, 6)

print("输入数组:")
print(data)
print("数组维度:")
print(np.shape(data))
print('\n')

输出结果如下:

输入数组:
[[[ 0  1  2  3  4  5]
  [ 6  7  8  9 10 11]
  [12 13 14 15 16 17]]]
数组维度:
(1, 3, 6)

数组的转置

三维数组的正常索引是(0, 1, 2),transpose(data)反转索引的顺序,变成(2, 1, 0);可以通过指定axes=(2, 1, 0)达到同样的效果

data_T = np.transpose(data)

print("输出数组:")
print(data_T)
print("数组维度:")
print(np.shape(data_T))

输出结果如下:

输出数组:
[[[ 0]
  [ 6]
  [12]]

 [[ 1]
  [ 7]
  [13]]

 [[ 2]
  [ 8]
  [14]]

 [[ 3]
  [ 9]
  [15]]

 [[ 4]
  [10]
  [16]]

 [[ 5]
  [11]
  [17]]]
数组维度:
(6, 3, 1)

指定axes=(2, 1, 0)

data_T = np.transpose(data, (2, 1, 0))

print("输出数组:")
print(data_T)
print("数组维度:")
print(np.shape(data_T))

输出结果如下:

输出数组:
[[[ 0]
  [ 6]
  [12]]

 [[ 1]
  [ 7]
  [13]]

 [[ 2]
  [ 8]
  [14]]

 [[ 3]
  [ 9]
  [15]]

 [[ 4]
  [10]
  [16]]

 [[ 5]
  [11]
  [17]]]
数组维度:
(6, 3, 1)

指定axes=(1, 2, 0)

将三维数组的索引(0, 1, 2)变成(1, 2, 0),数组维度由(1, 3, 6)变成(3, 6, 1)

data_T = np.transpose(data, (1, 2, 0))

print("输出数组:")
print(data_T)
print("数组维度:")
print(np.shape(data_T))

输出结果如下:

输出数组:
[[[ 0]
  [ 1]
  [ 2]
  [ 3]
  [ 4]
  [ 5]]

 [[ 6]
  [ 7]
  [ 8]
  [ 9]
  [10]
  [11]]

 [[12]
  [13]
  [14]
  [15]
  [16]
  [17]]]
数组维度:
(3, 6, 1)

版权声明:本文为qq_37938965原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。