我需要按以下方式计算 x
(遗留代码):
x = numpy.where(b == 0, a, 1/b)
我想它在 python-2.x 中有效(因为它在 python-2.7 代码中),但它在 python-3.x 中不起作用(如果 b = 0
返回错误)。
如何让它在 python-3.x 中工作?
编辑:错误信息(Python 3.6.3):
ZeroDivisionError: division by zero
最佳答案
numpy.where
不是条件执行;这是有条件的选择。 Python 函数参数总是在函数调用之前完全求值,因此函数无法有条件地或部分地求值其参数。
您的代码:
x = numpy.where(b == 0, a, 1/b)
告诉 Python 反转 b
的 every 元素,然后从 a
或 1/b
中选择元素在 b == 0
的元素上。 Python 甚至从未达到选择元素的程度,因为计算 1/b
失败。
您可以通过仅反转 b
的非零部分来避免此问题。假设 a
和 b
具有相同的形状,它可能看起来像这样:
x = numpy.empty_like(b)
mask = (b == 0)
x[mask] = a[mask]
x[~mask] = 1/b[~mask]
https://stackoverflow.com/questions/48696344/