Python numpy中的Unicode元素字符串比较
我有一个关于numpy和字符串数组的相等性比较的问题。 假设我定义以下数组:Python numpy中的Unicode元素字符串比较,python,arrays,numpy,unicode,python-2.x,Python,Arrays,Numpy,Unicode,Python 2.x,我有一个关于numpy和字符串数组的相等性比较的问题。 假设我定义以下数组: x = np.array(['yes', 'no', 'maybe']) 然后我可以测试与其他字符串的相等性,并与单个字符串进行元素级比较(我认为,以下是广播规则:?): 但是,如果与unicode字符串进行比较,则只有在将数组与字符串进行比较时,才会出现元素级比较的不同行为;如果将字符串与数组进行比较,则只会进行一次比较 x == u'yes' #op : array([ True, False, False],
x = np.array(['yes', 'no', 'maybe'])
然后我可以测试与其他字符串的相等性,并与单个字符串进行元素级比较(我认为,以下是广播规则:?):
但是,如果与unicode字符串进行比较,则只有在将数组与字符串进行比较时,才会出现元素级比较的不同行为;如果将字符串与数组进行比较,则只会进行一次比较
x == u'yes'
#op : array([ True, False, False], dtype=bool)
u'yes' == x
#op : False
我在numpy文档中找不到这种行为的详细信息,希望有人能解释或向我指出为什么与unicode字符串进行比较会有不同的行为?相关信息是以下部分: 对于对象
x
和y
,首先尝试x.\uuuuu op\uuuuu(y)
。如果未执行此操作或返回NotImplemented
,则尝试执行y.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuux
使用numpy数组x
,当左侧为str
('yes'==x
)时:
返回“是”。\uuuu eq\uuuuux)
和未实现
- 因此,解析为
——导致numpy的元素级比较x.uuu eq_uuuu('yes')
u'yes'==x
):
只返回u'yes.\uu eq\uuux)
False
不同的
\uuuuu eq\uuuu
行为的原因是str.\uuuu eq\uuuuu()
如果其参数不是str
类型,则返回NotImplemented
,而unicode.\uuu eq\uuuuu()
首先尝试将其参数转换为unicode
,并且仅在转换失败时返回NotImplemented
。在这种情况下,numpy数组可以转换为unicode
:u'yes'==x
本质上是u'yes'==unicode(x)
那么u'yes'==np.数组([u'yes',u'no',u'maybe'])
呢?出于各种原因,它的行为方式是相同的@一二三 下面的答案解释了这一点。i、 e.:u'yes'==np.array([u'yes',u'no',u'maybe'])
返回False
和np.array([u'yes',u'no',u'maybe'])==u'yes'
返回数组([True,False,False],dtype=bool)
x == u'yes'
#op : array([ True, False, False], dtype=bool)
u'yes' == x
#op : False