如何仅重塑 numpy 中的最后一个维度?

How to reshape only last dimensions in numpy?

假设我有 A 的形状 (...,96) 并想将其重塑为 (...,32,3) 保持长度和前面维度的数量(如果有的话)完整无缺。

如何操作?

如果我写

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)

之所以可行,是因为串联的引导轴是空的,因此仅在此处使用拆分轴长度 -

In [904]: A.shape[:-1]
Out[904]: ()

In [905]: A.shape[:-1] + (32,3)
Out[905]: (32, 3)