2017-09-12 21 views
0

假设我有形状为(...,96)A,并且希望将它重新整形为(...,32,3),同时保留两个长度和之前的维数(如果有的话)完好无损。如何仅重塑numpy中的最后尺寸?

如何做到这一点?

如果我写

np.reshape(A, (-1, 32, 2)) 

将扁平化之前的所有方面纳入一个单一的,这是我不想要的。

+0

这种'-1'的使用不是省略号。它是“计算保留相同整体大小的一个(明确的)维度”的简写。 – hpaulj

+0

发布的解决方案是否适合您? – Divakar

+0

@Divakar绝对,谢谢 – Dims

回答

3

一种方法是使用与新的分割轴的长度,然后重塑串联形状信息来计算新形状的元组 -

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)