transpose理解
文章目录
【注意】最后更新于 December 1, 2017,文中内容可能已过时,请谨慎使用。
最近要做一个作业,用到了numpy的transpose函数,感觉理解起来不是很容易,记录一下。
理论角度
首先,学过线代的孩子们都知道,矩阵的转置就是行与列的变换嘛。没什么复杂的。比如一个矩阵
1
|
[1 2 3 4] |
进行转置就成了
1 2 3 4 |
1 2 3 4 |
不复杂对吧。二维的也一样。
1 2 3 |
1 2 3 4 5 6 7 8 9 10 11 12 |
进行转置就是
1 2 3 4 |
1 5 9 2 6 10 3 7 11 4 8 12 |
如果是一个三维的呢? 有点蒙了。接下来是我的一点理解了。不一定准确,凑合来看。 ------------------昏隔--------------------- 矩阵也有坐标空间,比如一维的是x轴,y轴上为0,所以转置就是转到y轴上了。 二维的是x,y轴,转置就是相当于y=x的对称变换嘛。 到了三维,人就活到三维,所以就不好理解了。咋办?而且,如果你说转置怎么个映射办法? 还是对比二维。需要转置就是看对应的轴。如果一个轴不需要变换的话,就是给映射到平面上,然后做二维的变换。需要的话我就编不下去了。 ------------------昏隔---------------------
纯代码角度
来看! 拿一个二维矩阵
1 2 3 |
1 2 3 4 5 6 7 8 9 10 11 12 |
进行转置的话。
数字1
的位置是(0,0)
,数字2
的位置是(0,1)
,数字9的位置是(2,0)
进行转置的话就是把这个位置对调,结果就是:
数字1
的位置是(0,0)
,数字2
的位置是(1,0)
,数字9的位置是(0,2)
全部都这么一变,就成了
1 2 3 4 |
1 5 9 2 6 10 3 7 11 4 8 12 |
好了,直接上3维的。表示都是个难题。
1 2 3 4 5 6 7 8 9 |
[11 12 13 14 15 16 17 18 19] [21 22 23 24 25 26 27 28 29] [31 32 33 34 35 36 37 38 39] |
如果我要找到28,它的位置是(0,2,1)
,32位置是(2,0,1)
可以看出,我们表示这个矩阵,需要三个值来表示,如果把位置当成数组来理解的话,下标值分别是0,1,2。
28就是这个
1 2 3 |
0 -> 0 1 -> 2 2 -> 1 |
32就是
1 2 3 |
0 -> 2 1 -> 0 2 -> 1 |
这个地方理解了才能理解后面的具体操作。 通常,高维矩阵进行转置的时候,就是这么调用的
|
|
一看很乱。我们这样理解就好了
传递的参数就是下标的位置 0,1,2。需要按照它信给的顺序排序。
我原本的下表顺序是0,1,2
,结果,现在要变成2,0,1
。
我们再看上面的例子。
原来28的位置是(0,2,1)
,32位置是(2,0,1)
注意啊!我是要改变下标的位置,并不改变下标所对应的值。
28下标按0,1,2
变成2,0,1
就是(1,0,2)
,32就成了(1,2,0)
拿28举例子
1 2 3 |
0 -> 0 ---->>> 2 ->1 1 -> 2 ---->>> 0 ->0 2 -> 1 ---->>> 1 ->2 |
图示如下
就是带着值把下标位置挪到新的位置上。
说的有点乱,希望能够对于不理解的人有点启发吧。