0
假设我有形状为(...,96)
的A
,并且希望将它重新整形为(...,32,3)
,同时保留两个长度和之前的维数(如果有的话)完好无损。如何仅重塑numpy中的最后尺寸?
如何做到这一点?
如果我写
np.reshape(A, (-1, 32, 2))
将扁平化之前的所有方面纳入一个单一的,这是我不想要的。
假设我有形状为(...,96)
的A
,并且希望将它重新整形为(...,32,3)
,同时保留两个长度和之前的维数(如果有的话)完好无损。如何仅重塑numpy中的最后尺寸?
如何做到这一点?
如果我写
np.reshape(A, (-1, 32, 2))
将扁平化之前的所有方面纳入一个单一的,这是我不想要的。
一种方法是使用与新的分割轴的长度,然后重塑串联形状信息来计算新形状的元组 -
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)
工作原因是因为主轴catenation是空的,因此只使用分割轴长度 -
In [904]: A.shape[:-1]
Out[904]:()
In [905]: A.shape[:-1] + (32,3)
Out[905]: (32, 3)
这种'-1'的使用不是省略号。它是“计算保留相同整体大小的一个(明确的)维度”的简写。 – hpaulj
发布的解决方案是否适合您? – Divakar
@Divakar绝对,谢谢 – Dims