利用Python进行数据分析--Python Numpy 模块的transpose命令

这个命令比较奇葩,通过这个命令可以看出Numpy和matlab很像但完全不是一回事。

使用一个简单的例子来说明吧

arr = np.arange(12).reshape((2,2,3)

输出的结果是:

利用Python进行数据分析--Python Numpy 模块的transpose命令

这个结果非常的有意思,从这里开始往下就和matlab不一样了。

首先要明白arr3中元素的位置是如何确定的。比如说数字7应该怎么提出来?看着像是第1行,第2列的1维数组中的第2个元素,按这个试试看:

利用Python进行数据分析--Python Numpy 模块的transpose命令

哈。完全不对不是嘛。实际上调用的方法如下:

利用Python进行数据分析--Python Numpy 模块的transpose命令

为什么会这样呢?这是理解上的偏差,注意看最上面的arr3的输出结果。

arr3首先被分成了2个大的元素集合,两个集合上下分布构成一个2行1列的元素集合矩阵。而数字7处在下面这个元素集合里,也就是第二行,调用序号为1。

利用Python进行数据分析--Python Numpy 模块的transpose命令

紧接着数字7处在第二个元素集合的第一行(序号0),又处在第一行的第2个位置上(序号1)

所以arr3[1,0,1] = 7

 

往上追溯一下reshape(a,b,c)之中的abc代表了什么?该怎么理解才是对的?

可以这么理解:a  代表了把原来的数据分成a个元素集合,这些集合构成一个a行1列的元素集合矩阵。紧接着每个元素集合里面都是一个b×c的数组。

 

 

然后我们在看一下transpose(a,b,c)是怎么运行的,又得到什么结果。

首先是transpose(0,1, 2)

利用Python进行数据分析--Python Numpy 模块的transpose命令完全没有变化

然后是tranpose(0,2,1)

利用Python进行数据分析--Python Numpy 模块的transpose命令变化有点大啊,条换了b和c的位置就有这样 的结果,这是为啥呢?

其实是这样的,还记得上面我们调用数字7是怎么来的吗?

arr3[1,0,1]  = 7 

而transpose(0,2,1)后数字7的位置该如何调用?看,7处在第二个元素集合(序号1)的第二行(序号1)的第一个位置上(序号0)

arr3[1,1,0] = 7 

 

对比下你就能发现,transpose是基于调用坐标的位置改变来转换数组的。原先数字7的调用坐标是[1,0,1],transpose后成了[1,1,0]。将坐标的最后两位调换了一下。通过这样的方法将原有所有数字坐标全部调整,构成了新的矩阵。

 

妈的,这不是蛋疼吗?才疏学浅还看不出这有啥用。。。。。