2016-08-27 105 views
1

将2D numpy数组转换为1D列列表的最佳方式是什么?将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功能?

+0

为什么?使用简单的'a.T'有什么问题? – Eric

回答

3

我想不出任何理由,你将需要而不是

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

你可以得到简单地a.T

如果你真的需要一个名单

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

,那么你可以使用list(a.T)

0

那么,这里的另一个的方式。 (我假设x是你原来的二维数组。)

[row for row in x.T] 

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

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