[英]Unicode elementwise string comparison in numpy
我有一个关于用numpy和字符串数组进行相等比较的问题。 说我定义以下数组:
x = np.array(['yes', 'no', 'maybe'])
然后,我可以测试与其他字符串的相等性,并与单个字符串进行元素明智的比较(我认为,遵循以下广播规则: 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)
但是,如果我与unicode字符串进行比较,则只有在将数组与字符串进行比较的情况下才会发生元素明智的比较,而仅在将字符串与数组进行比较的情况下进行一次比较。
x == u'yes'
#op : array([ True, False, False], dtype=bool)
u'yes' == x
#op : False
我在numpy文档中找不到此行为的详细信息,希望有人能向我解释或指出为什么与unicode字符串进行比较的行为有所不同的详细信息?
相关的信息是Python强制规则的这一部分:
对于对象
x
和y
,首先尝试x.__op__(y)
。 如果未实现或返回NotImplemented
,则尝试y.__rop__(x)
。
当左侧是str
( 'yes' == x
)时,使用numpy数组x
:
'yes'.__eq__(x)
返回NotImplemented
并且 x.__eq__('yes')
–导致numpy的逐元素比较。 但是,当左侧是unicode
( u'yes' == x
)时:
u'yes'.__eq__(x)
仅返回False
。 __eq__
行为不同的原因是,如果str.__eq__()
的参数不是str
类型,则仅返回NotImplemented
,而unicode.__eq__()
首先尝试将其参数转换为unicode
,并且仅在转换失败时返回NotImplemented
。 在这种情况下,numpy数组可转换为unicode
: u'yes' == x
本质上是u'yes' == unicode(x)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.