Python 将numpy 3D阵列重塑为2D

Python 将numpy 3D阵列重塑为2D,python,arrays,numpy,Python,Arrays,Numpy,我有一个非常大的数组,形状=(32,3,1e6) 我需要把它改成这个形状=(332E6) 在代码片段中,如何从以下内容开始: >>> m3_3_5 array([[[8, 4, 1, 0, 0], [6, 8, 5, 5, 2], [1, 1, 1, 1, 1]], [[8, 7, 1, 0, 3], [2, 8, 5, 5, 2], [1, 1, 1, 1, 1]], [[2, 4

我有一个非常大的数组,形状=(32,3,1e6) 我需要把它改成这个形状=(332E6)

在代码片段中,如何从以下内容开始:

>>> m3_3_5
array([[[8, 4, 1, 0, 0],
        [6, 8, 5, 5, 2],
        [1, 1, 1, 1, 1]],

       [[8, 7, 1, 0, 3],
        [2, 8, 5, 5, 2],
        [1, 1, 1, 1, 1]],

       [[2, 4, 0, 2, 3],
        [2, 5, 5, 3, 2],
        [1, 1, 1, 1, 1]]])
对此:

>>> res3_15
array([[8, 4, 1, 0, 0, 8, 7, 1, 0, 3, 2, 4, 0, 2, 3],
       [6, 8, 5, 5, 2, 2, 8, 5, 5, 2, 2, 5, 5, 3, 2],
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])
我尝试过各种组合,但没有成功:

>>> dd.T.reshape(3, 15)
array([[8, 8, 2, 6, 2, 2, 1, 1, 1, 4, 7, 4, 8, 8, 5],
       [1, 1, 1, 1, 1, 0, 5, 5, 5, 1, 1, 1, 0, 0, 2],
       [5, 5, 3, 1, 1, 1, 0, 3, 3, 2, 2, 2, 1, 1, 1]])

>>> dd.reshape(15, 3).T.reshape(3, 15)
array([[8, 0, 8, 2, 1, 8, 0, 8, 2, 1, 2, 2, 5, 2, 1],
       [4, 0, 5, 1, 1, 7, 3, 5, 1, 1, 4, 3, 5, 1, 1],
       [1, 6, 5, 1, 1, 1, 2, 5, 1, 1, 0, 2, 3, 1, 1]])

您可以使用np.hstack获得所需的行为

# g is your (3,3,5) array from above
reshaped = np.hstack(g[i,:,:] for i in range(3))  #uses a generator exp
reshaped_simpler = np.hstack(g) # this produces equivalent output to the above statmement
print reshaped # (3,30)
输出
a.转置([1,0,2])。重塑(3,15)
会做你想做的事。(我基本上是在关注@hpaulj的评论)


除了
重塑
之外,您可能还需要
转置
。我相信你会得到答案,但你可能会通过自己的实验学到更多。值得一提的是,我只是通过尝试一些方法找到了合适的转置,直到其中一种方法奏效为止。:-)用一个参数试试
transpose
,比如
transpose([2,0,1])
(只是一个猜测)。是的,简单的m3_3_5.重塑(3,15)不能提供预期的结果。您可以将其简化为
np.hstack(g)
np.concatenate(g,axis=-1)
。它迭代输入,在第一个轴上有效地分割输入,然后在最后一个轴上重新组装输入。这将根据需要对值进行重新排序(在本例中)。现在请澄清,我缺少nD数组n>2的转置*轴参数
array([[8, 4, 1, 0, 0, 8, 7, 1, 0, 3, 2, 4, 0, 2, 3],
       [6, 8, 5, 5, 2, 2, 8, 5, 5, 2, 2, 5, 5, 3, 2],
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])
In [14]: a = np.array([[[8, 4, 1, 0, 0],
        [6, 8, 5, 5, 2],
        [1, 1, 1, 1, 1]],

       [[8, 7, 1, 0, 3],
        [2, 8, 5, 5, 2],
        [1, 1, 1, 1, 1]],

       [[2, 4, 0, 2, 3],
        [2, 5, 5, 3, 2],
        [1, 1, 1, 1, 1]]])

In [15]: a.transpose([1,0,2]).reshape(3,15)
Out[15]: 
array([[8, 4, 1, 0, 0, 8, 7, 1, 0, 3, 2, 4, 0, 2, 3],
       [6, 8, 5, 5, 2, 2, 8, 5, 5, 2, 2, 5, 5, 3, 2],
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])