2014-01-25 36 views
1

說我有一個numpy的陣列numpy的 - 對整個矩陣運算

a = np.array([[a11 a12 a13], 
      [a21 a22 a23], 
      [a31 a32 a33]]) 

我想返回以下結果:

np.array([[a11/a1 a12/a1 a13/a1], 
      [a21/a2 a22/a2 a23/a2], 
      [a31/a3 a32/a3 a33/a3]]) 

其中:

a1 = np.sqrt(a11**2 + a12**2 + a13**2) 
    a2 = np.sqrt(a21**2 + a22**2 + a23**2) 
    a3 = np.sqrt(a31**2 + a32**2 + a33**2) 

換句話說,我想按照它所屬行的標準劃分數組的每個元素。

我已經寫了一些代碼來做到這一點,但它是坦率的可怕的 - 我循環了數組的行,我知道這不是按照設計的numpy。我有一種感覺,可以通過使用兩個我剛剛不知道的numpy庫調用來實現。

我想起了另一件事是:

a/np.reshape(np.linalg.norm(a,axis=1),(a.shape[0],1)) 

,但我不知道這是一個特別有效的方法。有什麼建議?

回答

2
import numpy as np 

a = np.array([[11, 12, 13], 
      [21, 22, 23], 
      [31, 32, 33]], float) 

a/np.sum(a**2, 1, keepdims=True)**0.5 
+0

需要sqrt不是sum,sqrt似乎沒有方便的axis或keepdims命令。 – user1654183

+0

我修改了答案,只需添加'** 0.5'。 – HYRY

+0

非常好的解決方案!謝謝 – user1654183