jay*_*bee 5 python arrays unicode numpy python-2.x
我有一个关于与numpy和字符串数组进行相等比较的问题.假设我定义了以下数组:
x = np.array(['yes', 'no', 'maybe'])
Run Code Online (Sandbox Code Playgroud)
然后我可以测试与其他字符串的相等性,并且它与单个字符串进行元素明智的比较(以下,我认为,这里的广播规则:http://docs.scipy.org/doc/numpy-1.10.1/user/ basics.broadcasting.html?):
'yes' == x
#op : array([ True, False, False], dtype=bool)
x == 'yes'
#op : array([ True, False, False], dtype=bool)
Run Code Online (Sandbox Code Playgroud)
但是,如果我与unicode字符串进行比较,我会得到不同的行为,只有当我将数组与字符串进行比较时才会发生元素明智的比较,如果我将字符串与数组进行比较,则只进行一次比较.
x == u'yes'
#op : array([ True, False, False], dtype=bool)
u'yes' == x
#op : False
Run Code Online (Sandbox Code Playgroud)
我在numpy docs中找不到这种行为的细节,并希望有人可以解释或指出为什么与unicode字符串的比较行为不同的细节?
相关的信息是Python的强制规则的一部分:
对于对象
x和y,首先x.__op__(y)是尝试.如果没有实现或返回NotImplemented,y.__rop__(x)则尝试.
使用你的numpy数组x,当左边是a str('yes' == x)时:
'yes'.__eq__(x)回归NotImplemented和x.__eq__('yes')- 导致numpy的元素比较.但是,当左侧是unicode(u'yes' == x)时:
u'yes'.__eq__(x)简单地回来False.不同__eq__行为的原因是,如果其参数不是类型,则str.__eq__()简单地返回,而首先尝试将其参数转换为a ,并且仅在该转换失败时返回.在这种情况下,numpy数组可以转换为:基本上是.NotImplementedstrunicode.__eq__()unicodeNotImplementedunicodeu'yes' == xu'yes' == unicode(x)
| 归档时间: |
|
| 查看次数: |
621 次 |
| 最近记录: |