假设我有A
形状(...,96)
并希望将其重新整形为(...,32,3)
,保持前面尺寸的长度和数量(如果有的话)完好无损。
怎么做?
如果我写
np.reshape(A, (-1, 32, 2))
它会将所有前面的尺寸压平成一个单独的,我不想要。
答案 0 :(得分:4)
一种方法是使用与新的分割轴长度连接的形状信息计算新的形状元组,然后重新整形 -
A.reshape(A.shape[:-1] + (32,3))
样品运行 -
In [898]: A = np.random.rand(5,96)
In [899]: A.reshape(A.shape[:-1] + (32,3)).shape
Out[899]: (5, 32, 3)
In [900]: A = np.random.rand(10,11,5,96)
In [901]: A.reshape(A.shape[:-1] + (32,3)).shape
Out[901]: (10, 11, 5, 32, 3)
甚至适用于1D
数组 -
In [902]: A = np.random.rand(96)
In [903]: A.reshape(A.shape[:-1] + (32,3)).shape
Out[903]: (32, 3)
因为连接的引导轴为空,因此仅使用分割轴长度 -
In [904]: A.shape[:-1]
Out[904]: ()
In [905]: A.shape[:-1] + (32,3)
Out[905]: (32, 3)