numpy «TypeError: ufunc 'bitwise_and' не поддерживается для типов ввода» при использовании динамически создаваемой логической маски - PullRequest
0 голосов
/ 02 июня 2018

В 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')

Почему разница?

1 Ответ

0 голосов
/ 02 июня 2018

& имеет более высокий приоритет , чем ==, поэтому выражение

a == 2.0 & b

совпадает с

a == (2.0 & b)

Вы получаете ошибку, потому чтопобитовое значение and не определено для скаляра с плавающей точкой и логического массива.

Добавьте скобки, чтобы получить то, что вы ожидали:

(a == 2.0) & b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...