MATLAB/倍频程setxorReturn the elements exclusive to A or B, sorted in ascending order.
这是一个固定的操作octave:2> setxor([1,2,3,4],[5,3])
ans =
1 2 4 5
np.logical_xor是逐元素比较,而不是set操作。在
我想在numpy中有一些set操作,但我应该查一下。我知道Python中有一个set类
^{pr2}$
setdiff1d是一个set difference函数,可以用作In [188]: xa=np.array([1,2,3,4])
In [189]: ya=np.array([5,3])
In [190]: np.concatenate([np.setdiff1d(xa,ya),np.setdiff1d(ya,xa)])
Out[190]: array([1, 2, 4, 5])
它使用np.unique和np.in1d;可以使用这些函数重写setxor。在In [199]: np.concatenate([xa[np.in1d(xa,ya,invert=True)],
ya[np.in1d(ya,xa,invert=True)]])
Out[199]: array([1, 2, 4, 5])
(可能需要先使用xa=np.unique(xa)等)。在
我的猜测是,如果有一个已定义的setxor函数,它将由这些相同的部分构建。在
宾果,谷歌搜索numpy set operations产生:In [201]: np.setxor1d(xa,ya)
Out[201]: array([1, 2, 4, 5])
它是:(对于2个唯一的数组)aux = np.concatenate( (ar1, ar2) )
aux.sort()
flag = np.concatenate( ([True], aux[1:] != aux[:-1], [True] ) )
flag2 = flag[1:] == flag[:-1]
return aux[flag2]
所以它对数组进行排序连接,然后删除不唯一的元素。在