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
太:)
答案 0 :(得分:2)
很明显,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了解更多详细信息。