Python中的numpy数组有一个Reshape方法,我们时常使用,但是目前为止没有对他进行深入的研究。在多维矩阵的情况下,reshape出来的,到底是什么样子的矩阵?所以尝试构造一个3维矩阵,剖析一下reshape的原理。
首先构造一个【5,4,3】的三维矩阵a,具体数值如下图所示
![38a851180996cfbf82b12c0373e2d21b.png](https://i-blog.csdnimg.cn/blog_migrate/dbfce0ba184cf5fb772904b7b60a7372.png)
然后将其reshape成【5,12】的矩阵,看到底是如何变化的
在reshape中未加order参数时,结果如下图所示
![663aef222d510ab4aedcc0a389a976bd.png](https://i-blog.csdnimg.cn/blog_migrate/c4d300ffedf5ea136e4ec365a2d83c06.jpeg)
可以看出reshape操作是将第二维进行了切割,把4x3的矩阵变成了1x12的矩阵
尝试加入不同order参数,发现不管是A还是C和F,结果都如没加参数是一样的。
如果想把a【0】作为一个整体,不对它进行拆分,也就是将a【1】整体放在a【0】矩阵的右侧,那么整体的shape应该为【4,15】的矩阵,尝试reshape看看
![a796d09f663e7089f909f7433b79314e.png](https://i-blog.csdnimg.cn/blog_migrate/1b4b4a5a0ce2dfc7e337e662131c82da.png)
如上图,可以看出,未加任何参数时,会对第三维进行拆分,直至填满矩阵的宽度,而不是我们想要的整体平移。此时尝试更换不同的参数
参数为C时:
![8b672c1e0b8bdaa914bf13bc22844102.png](https://i-blog.csdnimg.cn/blog_migrate/007123adf5594f8666bb3d7511b6bade.png)
参数为F时:
![4bb4b8f69298a9ece63c7f63e3d5671c.png](https://i-blog.csdnimg.cn/blog_migrate/64b44ece5250262bc6115fd1a017087f.png)
可以看出,C是维度越靠后,变化越快,换句话说,就是从最后一维开始,按行优先填充为需要的矩阵。如果写出程序的话,应该是下面这样
![42b33a04759610c1a0deb14d33ddbe52.png](https://i-blog.csdnimg.cn/blog_migrate/bee6ba216f04a21249a97321b23c0741.jpeg)
变换示意图:
![d53f65797567709ffeb303e5ba4acf8d.png](https://i-blog.csdnimg.cn/blog_migrate/e6d7fea3245f33404ae59d82c44e169a.jpeg)
参数为F时,维度越靠前,变化越快,从第一维开始,按列优先,填充为需要的矩阵,如果写出程序的话,应该是下面这样
![96aca8d763b37df283a6d0990566fc74.png](https://i-blog.csdnimg.cn/blog_migrate/b85012f43aa2adc02dae69723e50b579.jpeg)
变换示意图:
![4edbdb0a40613827e347fe03534e5aeb.png](https://i-blog.csdnimg.cn/blog_migrate/fe9e61f6d70dc93da0327a425c9daf93.jpeg)
上面大概就是reshape的用法,然而并不能满足我的要求,所以还需要更换别的函数进行处理。