丢失numpy数组的尺寸

时间:2015-05-17 12:48:40

标签: python arrays performance numpy multidimensional-array

我有一个numpy数组,其中包含每个包含更多列表的列表。我一直试图找出一种聪明而快速的方法来使用numpy来折叠这些列表的维度,但没有任何运气。

我看起来像这样:

>>> np.shape(projected)
(13,)
>>> for i in range(len(projected)):
    print np.shape(projected[i])
(130, 3200)
(137, 3200)
.
.
(307, 3200)
(196, 3200)

我想要的是一个包含所有子列表的列表,并且将是130 + 137 + .. + 307 + 196 long。我尝试过使用np.reshape(),但却出错:ValueError: total size of new array must be unchanged

np.reshape(projected,(total_number_of_lists, 3200))
>> ValueError: total size of new array must be unchanged

我一直在摆弄np.vstack,但无济于事。任何不包含for循环和.append()的帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:2)

您似乎可以像第一个轴axis=0一样使用np.concatenate -

np.concatenate(projected,0)

示例运行 -

In [226]: # Small random input list
     ...: projected = [[[3,4,1],[5,3,0]],
     ...:              [[0,2,7],[8,2,8],[7,3,6],[1,9,0],[4,2,6]],
     ...:              [[0,2,7],[8,2,8],[7,3,6]]]

In [227]: # Print nested lists shapes
     ...: for i in range(len(projected)):
     ...:     print (np.shape(projected[i]))
     ...:     
(2, 3)
(5, 3)
(3, 3)

In [228]: np.concatenate(projected,0)
Out[228]: 
array([[3, 4, 1],
       [5, 3, 0],
       [0, 2, 7],
       [8, 2, 8],
       [7, 3, 6],
       [1, 9, 0],
       [4, 2, 6],
       [0, 2, 7],
       [8, 2, 8],
       [7, 3, 6]])

In [232]: np.concatenate(projected,0).shape
Out[232]: (10, 3)