numpy-1.13 ufuncs中的“where”子句

时间:2017-06-23 15:50:00

标签: python numpy numpy-ufunc

我偶尔会在numpy的ufunc中使用where子句。例如,以下内容:

import numpy as np
a = np.linspace(-1, 1, 10)
np.sqrt(a, where=a>0) * (a>0)

在Numpy 1.12及更早版本中,这用于在可能的情况下给出平方根值,否则为零。

最近,我升级到numpy 1.13。上面的代码现在给出了以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: Automatic allocation was requested for an iterator operand, and it was flagged as readable, but buffering  without delayed allocation was enabled

我认为这正是应该使用where子句的方式,但也许我错了。所以我有两个问题:第一,这段代码有什么问题;第二,实现目标的推荐方法是什么?

1 个答案:

答案 0 :(得分:2)

供将来参考:这是numpy中的一个错误。它has been fixed用于下一个numpy版本,大概是版本1.13.1。

1.13.0的变通方法修复是向ufunc显式提供out参数。在上面的示例中,np.sqrt(a, where=a>0, out=np.zeros(a.shape))有效。