看代码的时候总是看到transpose函数,按照字面意思,觉得是转置,但是超过三维的时候,脑子有点想不过来,看了下资料。
想看具体参数可以参考–>numpy官网
但官网写得也不是很详细,看了下其他资料。
简单来说,transpose不是元素转置,而是返回轴转置的数组。所以三维就很好理解了。
举个例子:
1、一维数组:
>>> import numpy as np
>>> num1 = np.arange(5)
>>> num2 = np.transpose(num1)
>>> print('num1',num1,'\n','num2',num2)
num1 [0 1 2 3 4]
num2 [0 1 2 3 4]
对于一维数组,transpose不起作用,因为只有一个维度,不能进行轴转置,那么对于一维数组应该怎么进行呢,可以使用np.reshape函数。
>>> num3 = np.reshape(num1,(-1,1))
>>> print('num1',num1,'\n','num3',num3)
num1 [0 1 2 3 4]
num3 [[0]
[1]
[2]
[3]
[4]]
2、二维数组
对于二维数组进行转置有两种方法,一种是transpose和 .T 的 方式。
>>> num4 = np.arange(10).reshape(2,5)
>>> num5 = np.transpose(num4) # 采用transpose函数
>>> print(num4)
[[0 1 2 3 4]
[5 6 7 8 9]]
>>> print(num5)
[[0 5]
[1 6]
[2 7]
[3 8]
[4 9]]
>>> num6 = num4.T # 采用.T的方式
>>> print(num6)
[[0 5]
[1 6]
[2 7]
[3 8]
[4 9]]
那么,transpose是怎么工作的呢,我们来看下面的例子。
>>> num7 = np.transpose(num4,(1,0))
>>> num8 = np.transpose(num4,(0,1))
>>> print(num7)
[[0 5]
[1 6]
[2 7]
[3 8]
[4 9]]
>>> print(num8)
[[0 1 2 3 4]
[5 6 7 8 9]]
可以看到,num7成功转换,但是num8并没有转换,这就说明了transpose函数是通过轴转置来工作的,原始数据num4的维度是(0,1)两个维度,通过改变第二维度和第一维度的位置即可。
3、三维数组
三维数据通上面的二维数据一样,具有两种同样的方式.
>>> num1 = np.arange(24).reshape(2,3,4)
>>> num2 = np.transpose(num1)
>>> print(num1)
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
>>> print(num2)
[[[ 0 12]
[ 4 16]
[ 8 20]]
[[ 1 13]
[ 5 17]
[ 9 21]]
[[ 2 14]
[ 6 18]
[10 22]]
[[ 3 15]
[ 7 19]
[11 23]]]
>>> print(num1.shape)
(2, 3, 4)
>>> print(num2.shape)
(4, 3, 2)
从上面例子最后可以看出,原来的数据第三维度为4,而新的数据的第一维度是4,则表示,原来数据的(0,1,2)三个维度在新的数据中变为(2,1,0),将三个维度完全转置,当然自己也可以定义维度变化的顺序,以下面例子为例.
>>> num3 = np.transpose(num1,(1,2,0)) # 自己定义维度变化的顺序
>>> print(num1.shape)
(2, 3, 4)
>>> print(num3.shape)
(3, 4, 2)
(1,2,0)表示将原来数据的第二维度【维度从0开始,1表示第二维度】变为新数据的第一维度,原来数据的第三维度变为新数据的第二维度,原来数据的第一维度变化为新数据的第三维度,则可以随意改变维度的顺序。
其中T变化的方式和默认的transpose一致。