Почему np.all возвращает неправильное значение, когда я использую «is» по сравнению с «==»? - PullRequest
3 голосов
/ 25 мая 2019

Итак, я обнаружил ошибку в своем коде и могу воспроизвести следующее. В основном мне нужно проверить, все ли элементы в np.ndarray не равны 0.

>>> a = np.ones((3,3))
>>> np.all(a == 0) == False
True

Хорошо, отлично, все значения в пределах a отличны от нуля. Я знаю, что вместо этого можно сделать np.all((a == 0) == False), чтобы явно попросить сравнить с 0, но сначала я этого не сделал, и это заставило меня осознать, что при сравнении is с == есть разница в случае False .

>>> np.all(a == 0) is False
False

Я знаю, что is следует сравнивать, если объекты указывают на один и тот же объект. Но значит ли это, что два моих значения, которые вернули False, на самом деле не указывают на одно и то же False? Может быть, я просто обдумываю это, хотя ...

1 Ответ

5 голосов
/ 25 мая 2019

Тип возврата numpy.bool_, а не bool:

In [11]: type(np.all(a == 0))
Out[11]: numpy.bool_

In [12]: type(False)
Out[12]: bool

Проверка is подтверждает, что два объекта указывают на один и тот же объект .

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