我有一个二维向量的 numpy 数组,我正在尝试将其标准化如下。该数组可以具有幅度为零的向量。
x = np.array([[0.0, 0.0], [1.0, 0.0]])
norms = np.array([np.linalg.norm(a) for a in x])
>>> x/norms
array([[ nan, 0.],
[ inf, 0.]])
>>> nonzero = norms > 0.0
>>> nonzero
array([False, True], dtype=bool)
Run Code Online (Sandbox Code Playgroud)
我能以某种方式使用nonzero该师只适用于x[i]这样nonzero[i]的True?(我可以为此编写一个循环 - 只是想知道是否有一种麻木的方法来做到这一点)
或者有没有更好的方法来规范化向量数组,在这个过程中跳过所有零向量?
如果可以就地进行规范化,则可以像这样使用布尔索引数组:
nonzero = norms > 0
x[nonzero] /= norms[nonzero]
Run Code Online (Sandbox Code Playgroud)