将三维ndarray重塑为二维

时间:2018-10-10 01:08:48

标签: python arrays numpy multidimensional-array reshape

我有一个三维数组(形状为2,2,3),可以将其视为两个二维数组的组合。我想将这两个数组并排放置。这是我的出发点:

test1 = np.ndarray((2,2,3))
test1[0] = np.array([[1,2,3],
                     [4,5,6]])
test1[1] = np.array([[7,8,9],
                     [10,11,12]])

我可以通过遍历第一个维度来获得所需的结果,就像这样:

output = np.ndarray((2,6))
for n_port, port in enumerate(test1):
    output[:,n_port*3:(n_port+1)*3] = port  

给出:

array([[ 1.,  2.,  3.,  7.,  8.,  9.],
       [ 4.,  5.,  6., 10., 11., 12.]])

但是我想知道是否有一种轻松的方式来做到这一点。重塑功能将是显而易见的方法,但它可以将它们展平,而不是并排堆叠:

test1.reshape((2,6))
array([[ 1.,  2.,  3.,  4.,  5.,  6.],
       [ 7.,  8.,  9., 10., 11., 12.]])

感谢您的任何帮助!

2 个答案:

答案 0 :(得分:2)

基于线程intuition and idea behind reshaping 4D array to 2D array in numpy中描述的回溯思想,可以将arr.transposearr.reshape组合使用,如下所示:

In [162]: dd = np.arange(1, 13).reshape(2, 2, 3)

In [163]: dd
Out[163]: 
array([[[ 1,  2,  3],
        [ 4,  5,  6]],

       [[ 7,  8,  9],
        [10, 11, 12]]])

In [164]: dd.transpose((1, 0, 2))
Out[164]: 
array([[[ 1,  2,  3],
        [ 7,  8,  9]],

       [[ 4,  5,  6],
        [10, 11, 12]]])

In [165]: dd.transpose((1, 0, 2)).reshape(2, -1)
Out[165]: 
array([[ 1,  2,  3,  7,  8,  9],
       [ 4,  5,  6, 10, 11, 12]])

答案 1 :(得分:1)

您可以先进行swapaxes(),然后进行reshape()

test1.swapaxes(0,1).reshape(2,6)