В numpy, если у меня есть массив с плавающей точкой, динамически создать логическую маску, где этот массив равен определенному значению, и выполнить побитовое И с логическим массивом, я получаю ошибку:
>>> 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'
Если я сохраню результат сравнения в переменной и выполню побитовое И, однако, это сработает:
>>> 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')
Почему разница?