1 numpy基础之swapaxes
ndarray数组元素都可以用轴的索引进行唯一标识。
numpy中ndarray.transpose()的入参axes轴数量需要ndarray.ndim个(轴数量个,有多少个轴就要送多少个),而swapaxes()只需要2个。即,transpose()可以一次交换全部轴,而swapaxes()一次只能交换2个轴。
用法
ndarray.swapaxes(axis1, axis2)
描述
ndarray.swapaxes()将ndarray数组元素在两个轴上的索引进行交换。
入参
axis1:要交换的第1个轴的索引;
axis2:要交换的第2个轴的索引;
注意:轴的索引从0开始,比如,array([[0, 1, 2]])有2个轴,shape为(1,3),轴索引为(0,1)。
ndarray.swapaxes(m,n)等价于ndarray.swapaxes(n,m),即交换的两个轴只要索引位置一样,两个轴按不同顺序交换,其结果是一致的。
1.1 一维数组调用swapaxes
描述
因为ndarray.swapaxes()需要2个轴作为入参,所以,一维数组不可调用swapaxes()
示例
>>> import numpy as np
# 创建1维数组
>>> ar1=np.arange(3)
>>> ar1
array([0, 1, 2])
# 一维数组调用swapaxes()报错
>>> ar1.swapaxes(0,1)
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
ar1.swapaxes(0,1)
# 轴1(axis 1)即axis2的入参超出维度为1的数组的范围
numpy.exceptions.AxisError: axis2: axis 1 is out of bounds for array of dimension 1
>>> ar1.swapaxes()
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
ar1.swapaxes()
TypeError: swapaxes() takes exactly 2 arguments (0 given)
1.2 二维数组调用swapaxes
描述
swapaxes()将元素在两个轴上的索引进行交换。
比如,array([[0, 1, 2]]),shape为(1,3),轴索引为(0,1)。
元素3的索引为[0,2],其中0表示在0轴上的索引为0,而2表示在1轴上的索引为2。
转换后元素3的索引为[2,0],2表示在0轴上的索引,0表示在1轴上的索引。
即元素通过swapaxes(0,1)转换后,0轴上的索引由0变为1轴上的索引2,而1轴上的索引由2变为0轴上的索引0.
示例
>>> import numpy as np
# 创建2维数组,1行3列
>>> ar2=np.arange(3).reshape((1,3))
>>> ar2
array([[0, 1, 2]])
>>> ar2.shape
(1, 3)
>>> ar2.ndim
2
# swapaxes(0,1)将0轴和1轴上的元素进行索引互换。
>>> ar2.swapaxes(0,1)
array([[0],
[1],
[2]])
>>> ar2
array([[0, 1, 2]])
# swapaxes(0,1)等价于swapaxes(1,0)
>>> ar2.swapaxes(1,0)
array([[0],
[1],
[2]])
1.3 三维数组调用swapaxes
描述
swapaxes()将元素在两个轴上的索引进行交换。
比如,ar3=np.arange(16).reshape(2,2,4),shape为(2,2,4),其中元素10的索引为[1,0,2],
通过ar3.swapaxes(0,2)将0轴和2轴索引转换后为[2,0,1]。
并且,ar3.swapaxes(2,0)等价于ar3.swapaxes(0,2)。
示例
>>> import numpy as np
# 创建3维数组
>>> ar3=np.arange(16).reshape(2,2,4)
>>> ar3
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
>>> ar3.shape
(2, 2, 4)
>>> ar3_sw=ar3.swapaxes(0,2)
>>> ar3_sw
array([[[ 0, 8],
[ 4, 12]],
[[ 1, 9],
[ 5, 13]],
[[ 2, 10],
[ 6, 14]],
[[ 3, 11],
[ 7, 15]]])
# 元素10,通过swapaxes(0,2)
# 将0轴索引1转为2轴索引2
# 将2轴索引2转为0轴索引0,得[2,0,1]
>>> ar3[1,0,2],ar3_sw[2,0,1]
(10, 10)
>>> ar3[1,1,0],ar3_sw[0,1,1]
(12, 12)
# ar3.swapaxes(2,0)等价于ar3.swapaxes(0,2)
>>> ar3.swapaxes(2,0)==ar3.swapaxes(0,2)
array([[[ True, True],
[ True, True]],
[[ True, True],
[ True, True]],
[[ True, True],
[ True, True]],
[[ True, True],
[ True, True]]])