通过 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]
我有 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]