Numpy reshape

作者 Mingjiang Shi 日期 2019-05-31
Numpy reshape

reshape

reshape顾名思义就是重新调整向量的shape。reshape后要保证向量的size(也就是元素个数不变)。比如12个元素组成一维向量,其shape是(12,),可以reshape为(2,6),(6,2),(3,4),(4,3),但是不能reshape为(2,5),因为元素数量不对了。那reshape具体是怎么操作的呢?我们来看例子。

一维向量a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]要reshape为(2,6)。我们从左边开始看起,最左边的维度的shape是2,那边表示最外层包含2个元素,那么就相当于把a的12个元素分成了2份,正好每份6个元素,组成了第二维。

[
[ 1, 2, 3, 4, 5, 6],
[ 7, 8, 9, 10, 11, 12]
]

代码如下:

>>> a = np.array([i for i in range(1,13)])
>>> a
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
>>> a.reshape(2,6)
array([[ 1, 2, 3, 4, 5, 6],
[ 7, 8, 9, 10, 11, 12]])
>>>

继续,我们把a reshape为(2,3,2),还是先从新的shape的最左边开始,最左边为2,于是将其分成2份,变成了

[
[ 1, 2, 3, 4, 5, 6],
[ 7, 8, 9, 10, 11, 12]
]

接着,第二维的shape维3,于是将第一维中的元素分成3份,每份正好是2个元素,于是,

[1,2,3,4,5,6]变成了

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

[ 7, 8, 9, 10, 11, 12]变成了

[
[ 7, 8],
[ 9, 10],
[11, 12]
]

最后,再把它们放回去,于是a.reshape(2,3,2)变成了

[
[
[ 1, 2],
[ 3, 4],
[ 5, 6]
],
[
[ 7, 8],
[ 9, 10],
[11, 12]
]
]

此外,reshape参数中某个值为-1的话,该维元素的个数会自动推断出来,比如上面例子中reshape(2, -1, 2)与reshape(2, 3, 2) 是一样的。