比较字符串1-d numpy数组元素

时间:2016-02-06 22:02:17

标签: python arrays string numpy

我有两个包含字符串的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)

2 个答案:

答案 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.equaldeprecated 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)