numpy数组的转置与换轴transpose和swapaxes方法

numpy数组的转置与换轴transpose和swapaxes方法,第1张

numpy数组的转置与换轴transpose和swapaxes方法 transpose

转置是一种特殊的数组重组形式,可以返回底层数据的视图而不需要复制任何内容。数组拥有transpose方法和特殊的T属性。
对于高维度的数组,transpose方法可以接收包含轴编号的元组,用于置换轴。
对于transpose方法展示的经典案例

arr3d = np.arange(16).reshape((2, 2, 4))
arr3d
arr3d.transpose((1, 0, 2))

这是arr3d的运行结果:

这是arr3d的transpos方法的运行结果:

例子中是一个三维的数组进行了轴变换,arr3d的默认轴顺序是(0, 1, 2)而通过transpose方法换为了(1, 0, 2),所以对应的 空间 中的位置也发生了变换。运行结果只是编译器对于三维数组的一种表达形式,如果单纯的理解为只是将二三行互换了,就很难理解这个方法。
我尝试着使用线性代数能否直接从运行结果的改变上直接的表达出这种变化,但是失败了,故选择从坐标上去解释transpose方法。
例子伊始我们利用reshape((2, 2, 4))将该数组划分为三维,即每个元素在空间坐标系中都对应了一个坐标,x轴、y轴、z轴分别对应0轴、1轴和2轴。譬如‘11’的坐标是(1, 0, 3),当然我们可以狭义的理解为11处在第1大组的第0小组的第3个位置上(我很希望解释成第2大组内第1个小组的第4个位置,但是计算机是从0开始进行排序的)。
transpose方法运行后,交换了1和0两个轴,从数学上理解就是交换了x轴和y轴坐标。那么此时‘11’应该处在什么位置上呢?很显然它的坐标变成了(0, 1, 3)。对应第二张图所示的位置。将每个元素的坐标皆进行变化,就能得到运行结果。
简而言之,transpose方法内的三个参数只可能是0,1,2.因为我们完全可以将它理解为x,y,z轴。按照轴的变换的顺序推断坐标,即可理解方法的工作内容。
空间中的作图我并不擅长,空间坐标系图可参考大牛文章Python numpy.transpose 详解

swapaxes

在理解了transpose方法之后再来看swapaxes就变得简单多了。
swapaxes方法和transpose方法传入的参数意义相同,都只有0,1,2而已,传入的也都是轴。而swapaxes传入的参数只有两个,即将传入的两对轴交换。
在经典示例中transpose((1, 0, 2))既是交换了0轴和1轴的位置,那么他就等同于swapaxes(0, 1)

swapaxes(a, b)等价于swapaxes(b, a)

arr3d.swapaxes(1, 2)#输入一对轴坐标,进行轴的交换
arr3d.swapaxes(0, 1)#这个 *** 作对应上面的transpose 将1轴和0轴交换

运行结果如下:

部分示例参考《利用Python进行数据分析》一书

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5652043.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存