numpy中的Unicode逐元素字符串比较

周杰伦

我有一个关于用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强制规则的这一部分

对于xy,首先x.__op__(y)尝试。如果未实现或返回NotImplemented,请y.__rop__(x)尝试。

使用numpy数组x,当左侧是str'yes' == x)时:

  • 'yes'.__eq__(x)返回NotImplemented
  • 因此解决x.__eq__('yes')–导致numpy的逐元素比较。

但是,当左侧为unicodeu'yes' == x)时:

  • u'yes'.__eq__(x)简单地返回False

究其原因,不同的__eq__行为是str.__eq__()简单的回报NotImplemented,如果它的参数是不是一个str类型,而unicode.__eq__()首先尝试它的参数转换为一个unicode,并且只返回NotImplemented,如果转换失败。在这种情况下,numpy数组可转换为unicodeu'yes' == x本质上是u'yes' == unicode(x)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章