Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python numpy中的Unicode元素字符串比较_Python_Arrays_Numpy_Unicode_Python 2.x - Fatal编程技术网

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

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],

我有一个关于numpy和字符串数组的相等性比较的问题。 假设我定义以下数组:

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)
    返回
    未实现
  • 因此,解析为
    x.uuu eq_uuuu('yes')
    ——导致numpy的元素级比较
但是,当左侧为unicode时(
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