找到两个数组的非相交值

时间:2014-08-09 17:01:22

标签: python arrays numpy

如果我有两个numpy数组并且想要找到非相交值,我该怎么做?

以下是我无法弄清楚的简短例子。

a = ['Brian', 'Steve', 'Andrew', 'Craig']
b = ['Andrew','Steve']

我想找到不相交的值。在这种情况下,我希望我的输出是:

['Brian','Craig']

与我想要的完全相反:

c=np.intersect1d(a,b)

返回

['Andrew' 'Steve']

5 个答案:

答案 0 :(得分:8)

鉴于您的问题中显示的任何对象都不是Numpy数组,您不需要Numpy来实现此目的:

c = list(set(a).symmetric_difference(b))

如果你必须有一个Numpy数组作为输出,那么创建一个很简单:

c = np.array(set(a).symmetric_difference(b))

(这假设元素在c中出现的顺序无关紧要。如果确实如此,则需要说明预期的顺序是什么。)

P.S。还有一个纯粹的Numpy解决方案,但我个人觉得很难阅读:

c = np.setdiff1d(np.union1d(a, b), np.intersect1d(a, b))

答案 1 :(得分:8)

您可以使用setxor1d。根据{{​​3}}:

  

找到两个数组的独占或集合   返回仅在一个(而不是两个)输入数组中的已排序的唯一值。

用法如下:

import numpy

a = ['Brian', 'Steve', 'Andrew', 'Craig']
b = ['Andrew','Steve']

c = numpy.setxor1d(a, b)

执行此操作会导致c的值为array(['Brian', 'Craig'])

答案 2 :(得分:0)

这应该用于python数组

c=[x for x in a if x not in b]+[x for x in b if x not in a]

它首先收集来自不在b中的所有元素,然后添加b中不在a中的所有元素。通过这种方式,您可以获得a或b中的所有元素,但不能同时获得这两个元素。

答案 3 :(得分:0)

np.setdiff1d(a,b)

这将返回第一个参数与第二个参数的不相交值
示例:

a = [1,2,3]
b = [1,3]
np.setdiff1d(a,b)  -> returns [2]
np.setdiff1d(b,a)  -> returns []

答案 4 :(得分:-1)

import numpy as np

a = np.array(['Brian', 'Steve', 'Andrew', 'Craig'])
b = np.array(['Andrew','Steve'])

你可以使用

set(a) - set(b)

输出:

set(['Brian', 'Craig'])

注意:set operation返回唯一值