当前位置:首页 > 技术分析 > 正文内容

numpy基础之swapaxes

ruisui883个月前 (03-16)技术分析32

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 
     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 
     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知识分享或软件测试开发目录。

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/2792.html

标签: .ndim
分享给朋友:

“numpy基础之swapaxes” 的相关文章

Gitlab之间进行同步备份

目前,我们公司有两个研发团队,分别在北京和武汉,考虑到访问速度的问题,原有武汉的研发环境在近端部署。也就是北京和武汉分别有两套独立的研发管理环境,虽然这解决了近端访问速度的问题,但是管理上较为分散,比如研发环境备份和恢复就是最重要的问题之一。最近,处于对安全性和合规性的考虑,希望将北京和武汉的源代码...

Vue中路由router的基本使用

??本文开始我们来给大家介绍在Vue中非常重要的一个内容,就是路由Router什么是路由后端路由:对于普通的网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源;前端路由:对于单页面应用程序来说,主要通过URL中的hash(#号)来实现不同页面之间的切换,同时,hash有一个特...

uni-app基于vue开发小程序与标准vue开发新增点

1、路由跳转传参uni.navigateTo({ url: `/pages/transition/spreadTextAction?t=${this.options.t}&rt=${this.options.rt}&l=${this.options.l}`});uni.navigateBack({...

微信外H5跳转小程序——组件(vue项目)

场景有个H5(vue项目),需要实现点击商品item跳转到小程序,微信内和微信外都要支持,这里我们只介绍一下H5在微信外的跳转。如图所示,红框内是一个商品,就是点击这里,要跳转小程序:配置微信小程序云开发(云函数)1、开通云开发然后选择免费额度2、云开发权限设置找到权限设置,把这里的「未登录用户访问...

尤雨溪:细聊 Vue 的现在与未来

大家好,我是 Echa。创作不易,喜欢的老铁们转发加个关注,点个赞,速速收藏,谢谢!另外咱们一起回顾一下Vue 优秀开源项目:12个又简单又实用的开源项目及组件推荐13个又热门又实用的Vue开源宝典库推荐7个Vue 3的高颜值UI组件库分享15个基于Vue3.0全家桶的优秀开源项目推荐10个基于Vu...

电机中“同步”、“异步”的区别到底在哪?

想要了解同步和异步的区别和工作原理必须知道“同步”是啥?定子电流产生的旋转磁场绑在(把磁场想象成一个实物)转子这块磁铁或电磁铁,一起“嗨”起来,两者速度相同...“异步”是啥?定子电流产生的旋转磁场自带几把刷子,旋转的时候对着转子一顿狂刷,利用“摩擦摩擦”将转子带起来,两者速度不同,产生差异(转差率...