说我有一个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))
但我不确定这是否是一种特别有效的方法。有什么建议吗?
答案 0 :(得分: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