将2D Numpy数组转换为1D列的列表

时间:2016-08-27 21:40:23

标签: python numpy

将2D numpy数组转换为1D列列表的最佳方法是什么?

例如,对于数组:

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

我想得到:

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

这有效:

[a[:, i] for i in range(a.shape[1])]

但我想知道是否有更好的解决方案使用纯Numpy功能?

4 个答案:

答案 0 :(得分:5)

我想不出你需要的任何理由

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

而不是

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

您只需使用a.T

即可获得

如果您确实需要一个列表,那么您可以使用list(a.T)

答案 1 :(得分:2)

这是一种方式:

In [20]: list(a.T)
Out[20]: [array([0, 1, 2, 3, 4]), array([5, 6, 7, 8, 9]), array([10, 11, 12, 13, 14])]

这是另一个:

In [40]: [*map(np.ravel, np.hsplit(a, 3))]
Out[40]: [array([0, 1, 2, 3, 4]), array([5, 6, 7, 8, 9]), array([10, 11, 12, 13, 14])]

答案 2 :(得分:0)

好吧,这是另一种方式。 (我假设x是你原来的2d数组。)

[row for row in x.T]

但仍然使用Python列表生成器表达式。

答案 3 :(得分:0)

只需调用列表函数:

list(a.T)