2016-02-15 58 views
4

陣列執行級聯2個1D numpy的沿第二軸線

import numpy as np 
t1 = np.arange(1,10) 
t2 = np.arange(11,20) 

t3 = np.concatenate((t1,t2),axis=1) 

導致

Traceback (most recent call last): 

    File "<ipython-input-264-85078aa26398>", line 1, in <module> 
    t3 = np.concatenate((t1,t2),axis=1) 

IndexError: axis 1 out of bounds [0, 1) 

爲什麼它報告軸1超出範圍?

回答

5

你的標題解釋了它 - 一個1D數組沒有第二軸!

不過話說回來,在我的系統上@Oliver W. S,也不會產生錯誤

In [655]: np.concatenate((t1,t2),axis=1) 
Out[655]: 
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 
     19]) 

這是結果,我會從axis=0預期:

In [656]: np.concatenate((t1,t2),axis=0) 
Out[656]: 
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 
     19]) 

它看起來像concatenate在數組爲1d時忽略axis參數。我不知道這是1.9版本還是舊版本中的新東西。

更多控制考慮使用vstackhstack包裝如果需要展開陣列尺寸:

In [657]: np.hstack((t1,t2)) 
Out[657]: 
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 
     19]) 

In [658]: np.vstack((t1,t2)) 
Out[658]: 
array([[ 1, 2, 3, 4, 5, 6, 7, 8, 9], 
     [11, 12, 13, 14, 15, 16, 17, 18, 19]]) 
2

你最好使用numpy的一個不同的函數調用numpy.stack
它的行爲像MATLAB的cat

numpy.stack函數不要求數組具有它們連接的維度。