python - 从两个 numpy 数组中删除重复元素

标签 python arrays numpy duplicates

我有两个 numpy 数组 ab,有两千万个元素( 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])

有人有最聪明的方法来实现这种减少吗?

最佳答案

首先,您必须打包 ab 以识别重复项。 如果值是正整数(请参阅其他情况下的编辑),可以通过以下方式实现:

base=a.max()+1
c=a+base*b

然后在c中查找唯一值:

val,ind=np.unique(c,return_index=True)

并检索ab中的关联值。

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/

相关文章:

java - 将 ArrayList 复制到二维数组的优雅方法

javascript - TypeScript 中以下条件有什么区别?

python - 如何在 python 中将元组转换为整数

arrays - 如何在 Oracle 中最好地存储数组?

python - 为什么 TensorFlow matmul() 比 NumPy multiply() 慢得多?

python - 如何使用 numpy 在线性时间内通过唯一值获取累积计数?

python - 将 cx_freeze 与 mysql-connector 结合使用

python - 在aws lambda上运行时如何解决python中的cx_Oracle问题

Python 脚本在 Pycharm 上运行,但在 c# 上不使用 Iron Python

python - 文档中令人困惑的 'readline' 警告