Несоответствие в поведении operator.ge - PullRequest
0 голосов
/ 20 февраля 2019
from operator import ge
import numpy as np

>>> ge([0,2,3], 0.8)
True
>>> ge([0,2,3], np.float64(0.8))
array([False,  True,  True])

Любое объяснение различий в поведении?

Позже выяснилось:

>>> ge([0,2,3], np.float(0.8))
True

тоже:)

1 Ответ

0 голосов
/ 20 февраля 2019

Очевидно, что разница между тем, как Python и Numpy работают с арифметическими операциями.ge(a, b) совпадает с a >= b.Если один из операндов является объектом Numpy, будет вызван соответствующий метод, а если другой операнд является массивом, он выполнит сравнение поэлементно.То есть, если вы сделаете следующее, вы получите тот же результат:

In [3]: [0,2,3] >= np.float64(0.8)
Out[3]: array([False,  True,  True])

Python, с другой стороны, по-разному обрабатывает ситуацию как в 2, так и в 3 версиях.Вы, вероятно, используете Python-2.X, и у него есть связанная логика (почти нелогично, но в Python 3 вы не можете сравнивать объекты разных типов, если соответствующая операция явно не реализована для одного из объектов.Для встроенных объектов, кроме разных числовых типов, объекты разных типов никогда не сравниваются одинаково.

In [4]:  ge([0,2,3], 0.8)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-4-405eded6881c> in <module>()
----> 1 ge([0,2,3], 0.8)

TypeError: '>=' not supported between instances of 'list' and 'float'

Подробнее https://docs.python.org/3/library/stdtypes.html#comparisons.

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