2017-06-07 161 views
1

我有2个numpy 1d数组,例如,如何将两个1d numpy数组拉到2d numpy数组中

a = np.array([1,2,3,4,5]) 
b = np.array([6,7,8,9,10]) 

然后我怎样才能获得2D阵列[[1,6],[2,7],[3,8],[4,9],[5,10]

+0

对于非常小的数组,'zip'可以比调用numpy的功能,速度更快,但对于更长数组的Numpy函数更快_much_,'column_stack'是我测试中速度最快的。例如,对于长度为1000的数组,“column_stack”大约比“zip”快1000倍。 [这是一些相关的timeit代码](https://gist.github.com/PM2Ring/a4d0540f960a80fde91fa808eaa88700)。 –

回答

3

的答案就在你的问题:

np.array(list(zip(a,b))) 


编辑:

虽然我的POS t根据OP的要求给出答案,转换到列表并返回到NumPy数组需要一些开销。

因此,dstack将是一个计算有效的替代方案(参考@ zipa的答案)。在发布这个答案时,我并不知道dstack,所以在@zipa中介绍这篇文章的时候感谢。

+2

为什么在使用Numpy数组的时候使用普通的Python函数来做到这一点? –

+0

@ PM2Ring你说得对。我不知道zipa的答案,但是第一个发布。 –

0

您可以使用zip

np.array(list(zip(a,b))) 
array([[ 1, 6], 
    [ 2, 7], 
    [ 3, 8], 
    [ 4, 9], 
    [ 5, 10]]) 
+1

@Ebe的回答有什么不同? – EdChum

+0

嗯,我们都在同一时间回答,我已经晚了差不多2-3秒 –

+5

为什么在使用Numpy数组的时候使用纯Python函数来做到这一点? –

9

如果你有numpy的阵列可以使用dstack()

import numpy as np 

a = np.array([1,2,3,4,5]) 
b = np.array([6,7,8,9,10]) 

c = np.dstack((a,b)) 
#or 
c = np.column_stack((a,b)) 
+0

或者,'np.stack((a,b),axis = -1)',但你的方式更紧凑。 –

+0

FWIW,'np.column_stack'似乎是最快的方法,请参阅我对问题的评论以获取详细信息。 –

+0

只需要注意 - 'np.dstack'在第三维堆栈数组。因此你会创建一个不必要的维度。 'np.column_stack'或'np.stack(...,axis = -1)'更合适。 –

相关问题