numpy.ma.MaskedArray.reshape详解

2019年1月24日

[MathematicaIn] reshape.arange(24).reshape(2,3,4)
[MathematicaOut]

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

 [[12,13,14,15],
  [16,17,18,19],
  [20,21,22,23]]]

reshape的维度之积必须与原数组长度相同。
[MathematicaIn] reshape.arange(20).reshape(2,3,4)
[MathematicaOut] ValueError: cannot reshape array of size 20 into shape (2,3,5)
[MathematicaIn] reshape.arange([[1,2,3],
 [4,5,6],
 [7,8,9]]
).reshape(2,3,4)

[MathematicaOut] ValueError: cannot reshape array of size 9 into shape (2,3,5)

性质:若运行reshape(a,b,c,d),设返回的矩阵为m,则m[0,0,:,:]有c*d个元素。

例题1:

m=np.arange(240).reshape(4,5,6,2),求m[1,2,3,0]

解:

m[0,:,:,:]有5*6*2=60个元素。

m[1,0,:,:]从60起,并有6*2=12个元素。

m[1,1,:,:]从72起。

m[1,2,:,:]从84起。

m[1,2,:,:]= [[84,85],
 [86,87],
 [88,89],
 [90,91],
 [92,93],
 [94,95]]

倒数第2个索引是纵向的,最后一个索引是横向的,所以m[1,2,3,0]=90。

例题2:
m=np.arange(32760).reshape(12,13,14,15),求m[9,8,7,6]

解:

m[0,:,:,:].size=13*14*15=2730。

m[9,0,:,:]从2730*9=24570起,且有14*15=210个元素。

m[9,8,0,:]从24570+210*8=26250起,且有15个元素。

m[9,8,7,0]从26250+15*7=26355起,且有1个元素。

m[9,8,7,6]=26355+1*6=26361.