从多个列表创建Python Numpy数组

时间:2018-12-07 22:07:34

标签: python arrays numpy

我正在学习有关numpy的更多信息,并且需要帮助从多个列表创建numpy数组。假设我有3个列表,

a = [1, 1, 1] 
b = [2, 2, 2] 
c = [3, 3, 3] 

如何使用每个列表作为列创建一个新的numpy数组?意味着新数组将为[[1, 2, 3], [1, 2, 3], [1, 2, 3]]。我知道如何通过遍历列表来做到这一点,但是我不确定是否有更简单的方法来完成此操作。 numpy串联函数似乎很接近,但是我不知道如何使它完成我想要的工作。 谢谢

2 个答案:

答案 0 :(得分:3)

尝试使用np.column_stack

d = np.column_stack([a, b, c])

答案 1 :(得分:2)

无需使用numpy。 Python zip做得很好:

In [606]: a = [1, 1, 1] 
     ...: b = [2, 2, 2] 
     ...: c = [3, 3, 3] 
In [607]: abc = list(zip(a,b,c))
In [608]: abc
Out[608]: [(1, 2, 3), (1, 2, 3), (1, 2, 3)]

但是如果您的心脏习惯使用numpy,那么一个好方法是制作一个2d数组并转置它:

In [609]: np.array((a,b,c))
Out[609]: 
array([[1, 1, 1],
       [2, 2, 2],
       [3, 3, 3]])
In [610]: np.array((a,b,c)).T
Out[610]: 
array([[1, 2, 3],
       [1, 2, 3],
       [1, 2, 3]])

其他人展示了如何使用stackcolumn_stack来执行此操作,但是在它们下面的是concatenate。他们以一种或多种方式将列表转换为可以在axis = 1上连接的2d数组,例如

In [616]: np.concatenate([np.array(x)[:,None] for x in [a,b,c]], axis=1)
Out[616]: 
array([[1, 2, 3],
       [1, 2, 3],
       [1, 2, 3]])