如果我有两个numpy数组并且想要找到非相交值,我该怎么做?
以下是我无法弄清楚的简短例子。
a = ['Brian', 'Steve', 'Andrew', 'Craig']
b = ['Andrew','Steve']
我想找到不相交的值。在这种情况下,我希望我的输出是:
['Brian','Craig']
与我想要的完全相反:
c=np.intersect1d(a,b)
返回
['Andrew' 'Steve']
答案 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返回唯一值