numpy基础之swapaxes

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 "", 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 "", line 1, in <module>
    ar1.swapaxes()
TypeError: swapaxes() takes exactly 2 arguments (0 given)

1.2 二维数组调用swapaxes

描述

swapaxes()将元素在两个轴上的索引进行交换。

numpy基础之swapaxes_第1张图片

比如,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()将元素在两个轴上的索引进行交换。

numpy基础之swapaxes_第2张图片

比如,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]]])

你可能感兴趣的:(python,numpy,python)