如果我有两个numpy数组,并且想要找到它们之间不相交的值,我该如何做?
这是一个简短的示例,说明我无法理解的问题。
a = ['Brian', 'Steve', 'Andrew', 'Craig']
b = ['Andrew','Steve']
我想找到无交集的值。在这种情况下,我希望我的输出结果是:
['Brian','Craig']
这样做的结果恰恰与我想要的相反:
c=np.intersect1d(a,b)
返回
['Andrew' 'Steve']
setxor1d
。根据文档:
找到两个数组的集合异或。
返回仅出现在输入数组之一(而不是两者)中的已排序、唯一值。
用法如下:
import numpy
a = ['Brian', 'Steve', 'Andrew', 'Craig']
b = ['Andrew','Steve']
c = numpy.setxor1d(a, b)
执行此代码将导致 c
变量的值为 array(['Brian', 'Craig'])
。
考虑到您问题中展示的对象都不是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))
np.setdiff1d(a,b)
a = [1,2,3]
b = [1,3]
np.setdiff1d(a,b) -> returns [2]
np.setdiff1d(b,a) -> returns []
这应该对Python数组有用
c=[x for x in a if x not in b]+[x for x in b if x not in a]
首先,它收集了所有不在b中的a元素,然后添加了所有不在a中的b元素。这样,您就可以获得所有在a或b中但不在两者中都存在的元素。
import numpy as np
a = np.array(['Brian', 'Steve', 'Andrew', 'Craig'])
b = np.array(['Andrew','Steve'])
你可以使用
set(a) - set(b)
输出:
set(['Brian', 'Craig'])
注意:set操作返回唯一的值