2017-08-08 62 views
1

如何扁平化这样的:拼合3 d numpy的阵列

b = np.array([ 
    [[1,2,3], [4,5,6], [7,8,9]], 
    [[1,1,1],[2,2,2],[3,3,3]] 
]) 

到:

c = np.array([ 
    [1,2,3,4,5,6,7,8,9], 
    [1,1,1,2,2,2,3,3,3] 
]) 

Niether这些工作:

c = np.apply_along_axis(np.ndarray.flatten, 0, b) 
c = np.apply_along_axis(np.ndarray.flatten, 0, b) 

刚刚返回相同的阵列。

这将是很好的扁平化这个地方。

回答

2

这将做的工作:

c=b.reshape(len(b),-1) 

然后c

array([[1, 2, 3, 4, 5, 6, 7, 8, 9], 
     [1, 1, 1, 2, 2, 2, 3, 3, 3]]) 
+0

什么'-1'确实在'reshape'? – dokondr

+1

这是自动计算该维度大小的快捷方式。由于'b.size = 18'和'len(b)= 2','-1'被计算为'18/2 = 9' –

0

您可以完全压平,然后重塑:

c = b.flatten().reshape(b.shape[0],b.shape[1]*b.shape[2]) 

输出

array([[1, 2, 3, 4, 5, 6, 7, 8, 9], 
     [1, 1, 1, 2, 2, 2, 3, 3, 3]]) 
0

所以,你总是可以只使用重塑:

b.reshape((2,9)) 
array([[1, 2, 3, 4, 5, 6, 7, 8, 9], 
     [1, 1, 1, 2, 2, 2, 3, 3, 3]])