我正在尝试在 python 中执行元素明智除法,但如果遇到零,我需要商为零。
例如:
array1 = np.array([0, 1, 2])
array2 = np.array([0, 1, 1])
array1 / array2 # should be np.array([0, 1, 2])
我总是可以在我的数据中使用 for 循环,但要真正利用 numpy 的优化,我需要除以零错误时返回 0,而不是忽略错误。
除非我遗漏了什么,否则它似乎不是 numpy.seterr()可以在错误时返回值。有没有人对我如何在设置自己的除以零错误处理时充分利用 numpy 有任何其他建议?
最佳答案
在 numpy v1.7+ 中,您可以利用 ufuncs 的“where”选项。 .您可以在一行中完成操作,而不必与 errstate 上下文管理器打交道。
>>> a = np.array([-1, 0, 1, 2, 3], dtype=float)
>>> b = np.array([ 0, 0, 0, 2, 2], dtype=float)
# If you don't pass `out` the indices where (b == 0) will be uninitialized!
>>> c = np.divide(a, b, out=np.zeros_like(a), where=b!=0)
>>> print(c)
[ 0. 0. 0. 1. 1.5]
在这种情况下,它会在任何 'where' b 不等于 0 的地方进行除法计算。当 b 确实等于 0 时,它与您最初在 'out' 参数中给出的任何值保持不变。
关于python - 如何用零除返回0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26248654/