2014-06-16 145 views
4

讓我們假設一個具有2D矢量數組:numpy的:由一維數組乘以一個二維數組

v = np.array([ [1, 1], [1, 1], [1, 1], [1, 1]]) 
v.shape = (4, 2) 

和標量的數組:

s = np.array([2, 2, 2, 2]) 
s.shape = (4,) 

我想結果:

f(v, s) = np.array([ [2, 2], [2, 2], [2, 2], [2, 2]]) 

現在,執行v*s是一個錯誤。那麼,執行f最有效的方法是什麼?

回答

8

添加一個新的單數維的矢量:

v*s[:,None] 

這相當於重塑矢量作爲(LEN(S),1)。然後,由於NumPy廣播規則(相應的尺寸彼此相等或等於1),相乘對象的形狀將是(4,2)和(4,1),它們是兼容的。

請注意,當兩個操作數具有不等的維數時,NumPy將在操作數的前面插入更多維度的額外單數維。這會使你的矢量(1,4)與(4,2)不兼容。因此,我們明確指定添加額外維度的位置,以便使圖形兼容。

+0

This Works!你能解釋爲什麼這個原理起作用嗎? – user89

+0

@ user89:添加了解釋。 – nneonneo

+0

這個語法與無與np.newaxis相同,而不是無,(雖然我個人比np.newaxis更喜歡None)。 – usethedeathstar

相關問題