Python中NumPy库中transpose函数转置的理解

关于NumPy中tanspose函数的理解
tanspose函数高维数组的转置,有时候比较费脑子,这里对于三维转置,想了一种取巧的快捷理解和推导方式,仅供参考。

In [2]: import numpy as np
In [3]: arr = np.arange(16).reshape((2,2,4))
In [4]: arrr

Out[4]:array([[[ 0, 1, 2, 3],
               [ 4, 5, 6, 7]],
              [[ 8, 9, 10, 11],
               [12, 13, 14, 15]]])

以上可以理解成什么呢?

这个图可以辅助想象下,.reshape(2,2,4)函数的在0轴上切成两片(数值小于7.5的那些方格,和数值大于7.7的一部分),1轴上分成两列,每列再2轴上按次序排了四个。上面是由外向内的理解

那么由内向外写上面的代码的结果,就是先写最内层为2轴的,那么就是

[0,1,2,3]

然后2轴是在1轴上扩展的,我们把扩展的第二部分[4,5,6,7]加上
他们构成0轴上的第一部分:

[[0,1,2,3],[4,5,6,7]]

同理,0轴上第二部分

[[8,9,10,11],[12,13,14,15]]

最后将0轴两部分组合一下:

[[[0,1,2,3],[4,5,6,7]],
[[8,9,10,11],[12,13,14,15]]]

这么从内向外来写出来就比较明了。

那么我们按照上面的方法看下下面这个代码:


In [6]: arr.transpose((1,0,2))
Out[6]:array([[[ 0, 1, 2, 3],
               [ 8, 9, 10, 11]],
              [[ 4, 5, 6, 7],
               [12, 13, 14, 15]]])

这个函数

.transpose((1,0,2))

就是把0和1轴上转置了,2轴不动。
画出图来如下:仅仅0,1互换


互换0,1轴

同样按照上面的次序,先写最里层的2轴的
还是第一组

[0,1,2,3]

接下来有点变化了,因为我们要写在1轴上的扩展,这个时候不是4567了,因为那是在0轴上了,这个时候1轴上扩展的是

[8,9,10,11]

他们组成一个大组:

[[0,1,2,3],[8,9,10,11]]

同样的这个大组会最后在0轴上扩展:

[[4,5,6,7],[12,13,14,15]]

最后两个大组合起来:

[[[0,1,2,3],[8,9,10,11]],
[[4,5,6,7],[12,13,14,15]]]

形象地可以理解成一个三维的豆腐大块,切三刀,按照2轴,1轴,0轴的次序,由内往外拿出来。

那么有人可能想,不是每次都要这么画个三维图来推导结果吧?
熟练了可以直接看着初始的模样直接写转置的模样:

我们还是先看下这个初始样子

Out[4]:array([[[ 0, 1, 2, 3],
               [ 4, 5, 6, 7]],
              [[ 8, 9, 10, 11],
               [12, 13, 14, 15]]])

就是下面这张图片:


简单标注图

那么如果我们写一个

arr.transpose((2,1,0))

的结果呢?那就是把2,0轴对调下:

对换2,0轴后的简单标注图

先写2轴:

[0,8]

在1轴上的扩展后:

[[0,8],[4,12]]

再在0轴扩展:

[
[[0,8],[4,12]],
[[1,9],[5,13]],
[[2,10],[6,,14]],
[[3,11],[7,15]]
]

看下代码执行出来的结果:

In [7]: arr.transpose((2,1,0))
Out[7]:array([[[ 0, 8],
               [ 4, 12]],
              [[ 1, 9],
               [ 5, 13]],
              [[ 2, 10],
               [ 6, 14]],
              [[ 3, 11],
               [ 7, 15]]])

同样地,你也按照上面的方式试下推导下下面的结果呢?

arr.transpose((0,2,1))

结果是不是和下面的一样呢?

In [8]: arr.transpose((0,2,1))
Out[8]:array([[[ 0, 4],[ 1, 5],[ 2, 6],[ 3, 7]],[[ 8, 12],[ 9, 13],[10, 14],[11, 15]]])

最后,也看到有人是按照空间坐标系的方式,把每个位置的转成轴的元组值,轴转置后,对应换掉元组值,然后找寻对应的最开始的数值,最后再按照转置后的shape,来码出来结构。

这样也是理解的一种方式,可能思维理解上更为准确。

只是个人觉得那样不够直观,不够快捷。

这里想的豆腐块理论,2轴1轴0轴从内往外拿取的思路和方法可能不够严谨,或者思维方式上走了偏锋,走了治标的路子,但是多少也是一种理解,如果不习惯,还是按照自己原本的理解就好。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354