通过NumPy标准化矢量场

时间:2015-01-23 11:42:53

标签: python numpy

我有形状的field数组[高度宽度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抱歉我的英语不好

1 个答案:

答案 0 :(得分:4)

您可以对此操作进行矢量化,这样可以将执行速度提高几个数量级:

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