小编给大家分享一下numpy.transpose如何对三维数组进行转置,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
如下所示:
import numpy as np
三维数组
arr1 = np.arange(16).reshape((2, 2, 4)) #[[[ 0 1 2 3] # [ 4 5 6 7]] # [[ 8 9 10 11] # [12 13 14 15]]] arr2=arr1.transpose((1,0,2)) #[[[ 0 1 2 3] # [ 8 9 10 11]] # # [[ 4 5 6 7] # [12 13 14 15]]]
正序为(0,1,2),数组为
#[[[ 0 1 2 3] # [ 4 5 6 7]] # [[ 8 9 10 11] # [12 13 14 15]]]
为什么进过tanspose(1,0,2),数组变为
#[[[ 0 1 2 3] # [ 8 9 10 11]] # # [[ 4 5 6 7] # [12 13 14 15]]]
仔细观察之后,可以看到转置后的数组和转置前的数组的区别就是第一页的第二行和第二页的第一行对换了,可是为什么?
当我用arr1[0,1,0],索引值为4
当我用arr2[1,0,0],索引值为4
对比索引参数表的变化和正序和转置序的不同似乎存在某种联系
对于arr1数组,索引参数表[0,0,x]可以表示第一页的第一行,当前两个参数对换之后,同一个元素的索引参数表并没有变化
故arr2的第一页第一行和arr1的第一页第一行相同
对于arr1数组,索引参数表[0,1,x]可以表示第一页第二行,当前两个参数对换之后,同一个元素的索引值比如[0,1,0]变为[1,0,0],
这就是解释了索引值4的索引参数表的不同
大概就是这个思路所以transpose(1,0,2),数组的第一页第二行和第二页第一行对换
后面的四种转置方式也大致是这个思路,仔细观察一下,理解起来应该不难
arr3=arr1.transpose((0,2,1)) # [[[ 0 4] # [ 1 5] # [ 2 6] # [ 3 7]] # # [[ 8 12] # [ 9 13] # [10 14] # [11 15]]] arr4=arr1.transpose((2,0,1)) #[[[ 0 4] # [ 8 12]] # # [[ 1 5] # [ 9 13]] # # [[ 2 6] # [10 14]] # # [[ 3 7] # [11 15]]]
这里要注意的是,arr4数组变成4页,这是因为页码和行码对换之后,
页码从数量2,变成了4
而行码从数量4,变成了2
arr5=arr1.transpose((2,1,0)) #[[[ 0 8] # [ 4 12]] # # [[ 1 9] # [ 5 13]] # # [[ 2 10] # [ 6 14]] # # [[ 3 11] # [ 7 15]]] arr6=arr1.transpose((1,2,0)) #[[[ 0 8] # [ 1 9] # [ 2 10] # [ 3 11]] # # [[ 4 12] # [ 5 13] # [ 6 14] # [ 7 15]]]
另外,转置(2,0,1)可以看成,先转置(0,2,1)再转置(1,0,2)
转置(2,1,0)可以看成,先转置(1,0,2),然后转置(0,2,1),最后转置(1,0,2)
转置(1,2,0)可以看成,先转置(1,0,2),在转置(0,2,1)
代码可以写成
arr4=arr1.transpose(0,2,1).transpose(1,0,2)
#[[[ 0 4] # [ 8 12]] # # [[ 1 5] # [ 9 13]] # # [[ 2 6] # [10 14]] # # [[ 3 7] # [11 15]]]
结果一样!
看完了这篇文章,相信你对“numpy.transpose如何对三维数组进行转置”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。