我有一个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()
的帮助都将受到高度赞赏。
答案 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)