我有两个包含字符串的1-d数组(a和b),我想比较元素以获得输出c,如下所示。我尝试将其转换为设置和比较,但这并没有给出正确的解决方案。 logical_xor也不适用于字符串。我可以编写一个循环来执行此操作但是它失败了使用数组的目的,没有循环可以做到这一点的最佳方法是什么?
>> a
array(['S', 'S', 'D', 'S', 'N', 'S', 'A', 'S', 'M'],
dtype='|S1')
>> b
array(['T', 'I', 'D', 'N', 'G', 'B', 'A', 'J', 'M'],
dtype='|S1')
>> c
array([False, False, True, False, False, False, True, False, True],
dtype=bool)
答案 0 :(得分:3)
只需使用ndarray的__eq__方法,即==
>>> a = array(['S', 'S', 'D', 'S', 'N', 'S', 'A', 'S', 'M'], dtype='|S1')
>>> b = array(['T', 'I', 'D', 'N', 'G', 'B', 'A', 'J', 'M'], dtype='|S1')
>>> a == b
array([False, False, True, False, False, False, True, False, True], dtype=bool)
答案 1 :(得分:0)
您可以使用numpy.equal
:
import numpy as np
c = np.equal(a,b)
或numpy.core.defchararray.equal
:
c = np.core.defchararray.equal(a, b)
修改强>
np.equal
已deprecated in the last numpy's releases,现在提出FutureWarning
:
>>> c = np.equal(a,b)
__main__:1: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
>>> c
NotImplemented
等于运算符==
将遭遇与np.equal
相同的命运。所以我建议使用:
c = np.array([a == b], dtype=bool)