我有一个numpy的2D向量数组,我正尝试如下进行标准化。该阵列可以具有大小为零的向量。
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)
我可以以某种方式使用
nonzero
将除法仅应用于x[i]
,从而nonzero[i]
是True
吗? (我可以为此编写一个循环-只是想知道是否有一种 NumPy 的方式来做到这一点)还是有一种更好的方法来标准化向量数组,而在此过程中跳过所有零向量?
最佳答案
如果可以就地进行规范化,则可以使用 bool 索引数组,如下所示:
nonzero = norms > 0
x[nonzero] /= norms[nonzero]