我有两个numpy数组a
和b
,具有两千万个元素(浮点数)。如果这两个数组的组合元素相同,则我们将其称为重复,应将其从两个数组中删除。例如,
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]
vs相同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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句