numpy" TypeError:ufunc' bitwise_and'不支持输入类型"使用动态创建的布尔掩码时

时间:2018-06-02 11:10:01

标签: python numpy

在numpy中,如果我有一个浮点数组,动态创建一个布尔掩码,该数组等于一个特定值,并使用布尔数组进行按位AND,我得到一个错误:

>>> import numpy as np
>>> a = np.array([1.0, 2.0, 3.0])
>>> a == 2.0 & b

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: ufunc 'bitwise_and' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe'

如果我将比较结果保存到变量并执行按位AND,则可行:

>>> c = a == 2.0
>>> c & b
array([False,  True, False], dtype=bool)

在每种情况下创建的对象看起来都相同:

>>> type(a == 2.0)
<type 'numpy.ndarray'>
>>> (a == 2.0).dtype
dtype('bool')
>>> type(c)
<type 'numpy.ndarray'>
>>> c.dtype
dtype('bool')

为什么会有差异?

1 个答案:

答案 0 :(得分:6)

&的{​​{3}}高于==,因此表达式

a == 2.0 & b

相同
a == (2.0 & b)

您收到错误,因为没有为浮点标量和布尔数组定义按位and

添加括号以获得预期效果:

(a == 2.0) & b