前端开发入门到精通的在线学习网站

网站首页 > 资源文章 正文

numpy基础之swapaxes

qiguaw 2025-04-24 07:17:07 资源文章 4 ℃ 0 评论

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]]])

2 END

本文首发微信公众号:梯阅线条

更多内容参考python知识分享或软件测试开发目录。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表