将除法除以n numpy

Jan*_*egt 6 python performance numpy matrix

我通过矩阵逐点除法做矩阵但是除数矩阵中有一些零.这导致警告和一些NaN.我希望这些映射到0,我可以这样做:

edge_map = (xy/(x_norm*y_norm))
edge_map[np.isnan(edge_map)] = 0
Run Code Online (Sandbox Code Playgroud)

然而,这有两个问题,首先它仍然发出警告(我不喜欢警告),其次这需要第二次通过矩阵(不确定这是否是不可避免的)并且效率非常重要这部分代码.想法?

Chi*_*iel 5

这可能是最快的解决方案,但该where函数在预先计算解决方案时确实会触发错误:

import numpy as np

n = 4

xy = np.random.randint(4, size=(n,n)).astype(float)
x_norm = np.random.randint(4, size=(n,n)).astype(float)
y_norm = np.random.randint(4, size=(n,n)).astype(float)

xy_norm = x_norm*y_norm

edge_map = np.where(xy_norm == 0, xy_norm, xy/xy_norm)

print(xy)
print(xy_norm)
print(edge_map)
Run Code Online (Sandbox Code Playgroud)

  • 这与“with numpy.errstate(divide='ignore'):”相结合解决了问题并且比我自己的解决方案更快,谢谢 (3认同)