找到两个数组的非重叠值
如果我有两个numpy数组,想要找出它们之间不重合的值,我该怎么做呢?
这里有一个我搞不清楚的简单例子。
a = ['Brian', 'Steve', 'Andrew', 'Craig']
b = ['Andrew','Steve']
我想找出不重合的值。在这个例子中,我希望我的输出是:
['Brian','Craig']
与我想要的相反的结果可以用这个方法得到:
c=np.intersect1d(a,b)
这个方法返回的是:
['Andrew' 'Steve']
5 个回答
-2
import numpy as np
a = np.array(['Brian', 'Steve', 'Andrew', 'Craig'])
b = np.array(['Andrew','Steve'])
你可以使用
set(a) - set(b)
输出:
set(['Brian', 'Craig'])
注意:集合操作会返回唯一的值
0
这段代码可以用来处理Python中的数组。
c=[x for x in a if x not in b]+[x for x in b if x not in a]
它首先会找出数组a中那些不在数组b里的元素,然后再把数组b中那些不在数组a里的元素加进来。这样一来,你就得到了所有在a或b中的元素,但不包括同时在两个数组中的元素。
4
np.setdiff1d(a,b)
a = [1,2,3]
b = [1,3]
np.setdiff1d(a,b) -> returns [2]
np.setdiff1d(b,a) -> returns []
这个代码会返回第一个参数和第二个参数之间没有交集的值。
举个例子:
22
你可以使用 setxor1d
这个函数。根据文档的说明:
这个函数可以找到两个数组之间的“异或”集合。
它会返回那些只出现在一个数组(而不是两个数组都有)的独特值,并且这些值会被排序。
使用方法如下:
import numpy
a = ['Brian', 'Steve', 'Andrew', 'Craig']
b = ['Andrew','Steve']
c = numpy.setxor1d(a, b)
执行这个代码后,c
的值将变成 array(['Brian', 'Craig'])
。
14
根据你问题中显示的对象,它们都不是Numpy数组,所以你不需要用到Numpy就能做到这一点:
c = list(set(a).symmetric_difference(b))
如果你一定要输出一个Numpy数组,那创建一个非常简单:
c = np.array(set(a).symmetric_difference(b))
(这假设在c
中元素出现的顺序并不重要。如果顺序重要,你需要说明你期望的顺序是什么。)
附注:还有一种纯Numpy的解决方案,但我个人觉得它不太容易理解:
c = np.setdiff1d(np.union1d(a, b), np.intersect1d(a, b))