2017-08-13 126 views
1

儘管我已經看到這個問題的一些答案,我想知道是否有任何更好的方法來解決這個問題。numpy數組與第二維空

例如,

N = 15 
A = np.repeat(1/N, N) 

如果我這樣做的結果將有形狀(15)

如果我想要的形狀爲(15,1),我想我能做到

A = np.repeat(1/N, N)[:,np.newaxis] 

我也有同樣的問題與

np.ones(N); np.zeros(N) 

我可以使第二個維度爲1,通過使用「np.newaxis」

但我的問題是,有沒有更好的方法來做到這一點?

+0

嘗試A = A.reshape((15,1)) –

+0

使用'np.newaxis'是這個任務的一個很好的工具(儘管我使用了較短的'None')。有一個最低速度罰款。這個習語很清楚(對有經驗的用戶)。在許多其他情況下它也很有用。 – hpaulj

+0

@hpaulj,請解釋我爲什麼我的解釋不是最優? –

回答

1

對於np.onesnp.zeros可以傳遞一個元組指定輸出陣列的形狀:

np.ones((N, 1)); np.zeros((N, 1)) 

對於np.repeat,則可能需要傳遞的陣列(或列表)已經具有兩個維度,然後重複沿期望的軸:

>>> np.repeat([[1./N]], N, axis=0) 
array([[ 0.06666667], 
     [ 0.06666667], 
     [ 0.06666667], 
     [ 0.06666667], 
     [ 0.06666667], 
     [ 0.06666667], 
     [ 0.06666667], 
     [ 0.06666667], 
     [ 0.06666667], 
     [ 0.06666667], 
     [ 0.06666667], 
     [ 0.06666667], 
     [ 0.06666667], 
     [ 0.06666667], 
     [ 0.06666667]]) 

但是,該語法更難以閱讀/理解,並且沒有額外的表現。您可以堅持像您所示的那樣向陣列添加一個新的軸。

+0

將多餘的維度添加到'ones'是有道理的。像這樣調整「重複」會更慢,更難理解。 'np.full'更快。 – hpaulj

+0

@hpaulj感謝您的注意。實際上沒有時間來看看哪個工作更快。增加了一些關於此的評論。 –