我有两个 numpy 数组 a
和 b
,有两千万个元素( float )。如果这两个数组的组合元素相同,则我们称其为重复项,应将其从两个数组中删除。例如,
a = numpy.array([1,3,6,3,7,8,3,2,9,10,14,6])
b = numpy.array([2,4,15,4,7,9,2,2,0,11,4,15])
从这两个数组中,我们有 a[2]&b[2]
与 a[11]&b[11]
相同,那么我们称其为重复元素,应将其删除。与 a[1]&b[1]
与 a[3]&b[3]
相同,虽然每个数组本身都有重复元素,但它们不会被视为重复元素。所以我希望返回的数组是:
a = numpy.array([1,3,6,7,8,3,2,9,10,14])
b = numpy.array([2,4,15,7,9,2,2,0,11,4])
有人有最聪明的方法来实现这种减少吗?
最佳答案
首先,您必须打包 a
和 b
以识别重复项。
如果值是正整数(请参阅其他情况下的编辑),可以通过以下方式实现:
base=a.max()+1
c=a+base*b
然后在c
中查找唯一值:
val,ind=np.unique(c,return_index=True)
并检索a
和b
中的关联值。
ind.sort()
print(a[ind])
print(b[ind])
用于重复项的差异。 (这里有两个):
[ 1 3 6 7 8 3 2 9 10 14]
[ 2 4 15 7 9 2 2 0 11 4]
编辑
无论数据类型如何,c 数组都可以按如下方式制作,将数据打包为字节:
ab=ascontiguousarray(vstack((a,b)).T)
dtype = 'S'+str(2*a.itemsize)
c=ab.view(dtype=dtype)
关于python - 从两个 numpy 数组中删除重复元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36232314/