将二维Numpy数组转换为一维列的列表

6

如何最好地将一个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函数?

为什么?使用简单的a.T有什么问题吗? - Eric
4个回答

7

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

[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)


4

这是一种方法:

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

只需调用列表函数:

list(a.T)

1

好的,这里是另一种方法。(我假设x是您原始的二维数组。)

[row for row in x.T]

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接