python - Numpy where 和除以零

我需要按以下方式计算 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 反转 bevery 元素,然后从 a1/b 中选择元素在 b == 0 的元素上。 Python 甚至从未达到选择元素的程度,因为计算 1/b 失败。

您可以通过仅反转 b 的非零部分来避免此问题。假设 ab 具有相同的形状,它可能看起来像这样:

x = numpy.empty_like(b)
mask = (b == 0)
x[mask] = a[mask]
x[~mask] = 1/b[~mask]

https://stackoverflow.com/questions/48696344/

相关文章:

iphone - 变量被编译器优化掉

c# - 获取图标 128*128 文件类型 C#

c++ - 如何在 C++ 中初始化返回元组的变量?

python - 在 Path 上安装 Python 3.9 时安装 Tensorflow?

c# - 如何使用 C# 将字符串中的 "http:"替换为 "https:"?

vb.net - 对象引用未设置到对象的实例

perl - 'mv' 系统命令的 Perl 等价物是什么?

iphone - 检测 UITableView 中的触摸和按住

windows - "rm -rf"等同于 Windows PowerShell?

PHP 错误 : Warning: Cannot modify header information