Python中的numpy数组有一个Reshape方法,我们时常使用,但是目前为止没有对他进行深入的研究。在多维矩阵的情况下,reshape出来的,到底是什么样子的矩阵?所以尝试构造一个3维矩阵,剖析一下reshape的原理。
首先构造一个【5,4,3】的三维矩阵a,具体数值如下图所示
![8f1cfb06eacb33eee71ab98ede1fb9b4.png](https://i-blog.csdnimg.cn/blog_migrate/8a118eeb1cf9bf5431ef89281c6ab1e9.png)
![458f045d1e9770e3fea8d684210d2f33.png](https://i-blog.csdnimg.cn/blog_migrate/f19d436dd4dd1c2110a963ba04904e82.png)
然后将其reshape成【5,12】的矩阵,看到底是如何变化的
在reshape中未加order参数时,结果如下图所示
![3a181746677ca7b02f04c0a70a2dd4b0.jpeg](https://i-blog.csdnimg.cn/blog_migrate/474244712e7eb6b946e6846a237fb60e.jpeg)
![f729a1da608c131cf6691db791ee4caa.jpeg](https://i-blog.csdnimg.cn/blog_migrate/6d3280056de720561e21e6cf130cf482.jpeg)
可以看出reshape操作是将第二维进行了切割,把4x3的矩阵变成了1x12的矩阵
尝试加入不同order参数,发现不管是A还是C和F,结果都如没加参数是一样的。
如果想把a【0】作为一个整体,不对它进行拆分,也就是将a【1】整体放在a【0】矩阵的右侧,那么整体的shape应该为【4,15】的矩阵,尝试reshape看看
![2c71c702b53e8a1cbd32dd77d3141518.png](https://i-blog.csdnimg.cn/blog_migrate/9d7c2b1a85fe13e8d4e3be461085ee15.png)
如上图,可以看出,未加任何参数时,会对第三维进行拆分,直至填满矩阵的宽度,而不是我们想要的整体平移。此时尝试更换不同的参数
参数为C时:
![08137a174839045a127701bcc7de05a9.png](https://i-blog.csdnimg.cn/blog_migrate/94b74b2a0f9f3af557986a446e05cc51.png)
参数为F时:
![5918ce19330d891b115a85e3ec2e6daf.png](https://i-blog.csdnimg.cn/blog_migrate/c12fdcbda4d83b750d620e0de6539d5a.png)
可以看出,C是维度越靠后,变化越快,换句话说,就是从最后一维开始,按行优先填充为需要的矩阵。如果写出程序的话,应该是下面这样
![a456eb26b1aa737952d8b660d4be54b8.jpeg](https://i-blog.csdnimg.cn/blog_migrate/adb8adbd6e6864e1e5b78a672cd90ab3.jpeg)
变换示意图:
![2e3bcc72fc53831c57d726f3822a050e.jpeg](https://i-blog.csdnimg.cn/blog_migrate/f930688a416ce04b01b229633c1cb5a3.jpeg)
参数为F时,维度越靠前,变化越快,从第一维开始,按列优先,填充为需要的矩阵,如果写出程序的话,应该是下面这样
![7f772d4a9b0b42bb55809bcf1d8a7222.jpeg](https://i-blog.csdnimg.cn/blog_migrate/c318cfde44b657314b08f8425865a007.jpeg)
变换示意图:
![6fcbbbb4248ad532c545f20b198ed8ec.jpeg](https://i-blog.csdnimg.cn/blog_migrate/3bc7daf1cbbdbb97d92c9db92637b4ad.jpeg)
上面大概就是reshape的用法,然而并不能满足我的要求,所以还需要更换别的函数进行处理。