2017-06-07 212 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)'更合適。 –

相關問題