通过 NumPy 归一化矢量场

Normalize vector field by NumPy

我有 field 形状的数组 [height width 2] 我想让每个 [i, j] 的长度小于或等于 1 我使用以下程序来完成

def projectionOntoDisc(var):
    res = np.zeros_like(var)
    for i in xrange(var.shape[0]):
        for j in xrange(var.shape[1]):
            norm = max(1.0, np.linalg.norm(var[i, j]))
            res[i, j] = var[i, j] / norm
    return res

有没有更快的方法?

PS对不起我的英语不好

您可以向量化此操作,这应该会提高执行速度几个数量级:

norm = numpy.fmax(1.0, numpy.linalg.norm(var, axis=2))
res = var / norm[:, :, numpy.newaxis]