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

numpy基础之swapaxes

ruisui882个月前 (03-16)技术分析19

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” 的相关文章

一次Java内存占用高的排查案例,解释了我对内存问题的所有疑问

问题现象7月25号,我们一服务的内存占用较高,约13G,容器总内存16G,占用约85%,触发了内存报警(阈值85%),而我们是按容器内存60%(9.6G)的比例配置的JVM堆内存。看了下其它服务,同样的堆内存配置,它们内存占用约70%~79%,此服务比其它服务内存占用稍大。那为什么此服务内存占用稍大...

HTML5学习笔记三:HTML5语法规则

1.标签要小写2.属性值可加可不加””或”3.可以省略某些标签 html body head tbody4.可以省略某些结束标签 tr td li例:显示效果:5.单标签不用加结束标签img input6.废除的标签font center big7.新添加的标签将在下一HTML5学习笔记中重点阐述。...

《暗黑破坏神 2:重制版》PC 版 2.3 版本发布,支持英伟达 DLSS

IT之家 12 月 3 日消息,暴雪为《暗黑破坏神 2:重制版》PC 版发布了更新 2.3 版本,添加了“离线难度缩放”滑块(玩家可以在单人游戏时增加挑战和奖励的级别)、多项辅助功能和用户界面改进,以及英伟达 DLSS 支持。玩法改进:玩家现在可以在离线游戏的选项菜单中使用“游戏难度等级”,它提供与...

vue-router是如何解析query参数呢? #前端

vue-router 中的 query 解析。1. 大家好,我是龙仔。今天来分享 vue-router 是如何解析快乐参数的,因为使用 vue 路由会传 query 参数和快乐参数,所以从 vue 的角度来看如何解析传递的快乐参数。2. 基础知识大家应知道,快乐参数结构如:a、b、c、a、b、c、a...

三勾商城(java+vue3)微信小程序商城+SAAS+前后端源码

项目介绍本系统功能包括: 前台展示+后台管理+SAAS管理端,包括最基本的用户登录注册,下单, 购物车,购买,结算,订单查询,收货地址,后台商品管 理,订单管理,用户管理等等功能,小伙伴一起来看看吧。三勾小程序商城基于springboot+element-ui+uniapp打造的面向开发的小程序商城...

vue3 学习笔记 (二)——axios 的使用有变化吗?

本篇文章主要目的就是想告诉我身边,正在学 vue3 或者 准备学 vue3 的同学,vue3中网络请求axios该如何使用,防止接触了一点点 vue3 的同学会有个疑问?生命周期、router 、vux使用都改变了,那 axios 使用有没有啥改变?小姐姐使用 axios 之前,需要先安装好。yar...