求两个集合的唯一交集值

2024-06-25 05:18:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用hash得到唯一向量的索引(对于矩阵来说这是有效的),但是np.intersect1d不给出指数,它给出值。np.INID另一方面,给出了索引,但不是唯一的。我压缩了一段口述以使其有效,但似乎不是最有效的。我是python新手,所以想看看是否有更好的方法来实现这一点。谢谢你的帮助!在

代码:

import numpy as np
import hashlib
x=np.array([[1, 2, 3],[1, 2, 3], [4, 5, 6], [7, 8, 9]])
y=np.array([[4, 5, 6], [7, 8, 9],[1, 2, 3]])

xhash=[hashlib.sha1(row).digest() for row in x]
yhash=[hashlib.sha1(row).digest() for row in y]
z=np.intersect1d(xhash,yhash)

idx=list(range(len(xhash)))

d=dict(zip(xhash,idx))
unique_idx=[d[i] for i in z] #is there a better way to get this or boolean array
print(unique_idx)
uniques=np.array([x[i] for i in unique_idx])
print(uniques)

输出:

^{pr2}$

我也有类似的问题np.唯一()它没有给我任何索引。在


Tags: inimportfornparraysha1hashlibrow
2条回答

使用np.唯一属性返回in1d给定的唯一值的标志

代码:

import numpy as np
import hashlib
x=np.array([[1, 2, 3],[1, 2, 3], [4, 5, 6], [7, 8, 9]])
y=np.array([[1, 2, 3], [7, 8, 9]])
xhash=[hashlib.sha1(row).digest() for row in x]
yhash=[hashlib.sha1(row).digest() for row in y]
z=np.in1d(xhash,yhash)

##Use unique to get unique indices to ind1 results
_,unique=np.unique(np.array(xhash)[z],return_index=True)

##Compute indices by indexing an array of indices
idx=np.array(range(len(xhash)))
unique_idx=(np.array(idx)[z])[unique]

print('x=',x)
print('unique_idx=',unique_idx)
print('x[unique_idx]=',x[unique_idx])

输出:

^{pr2}$

numpy_indexed包(免责声明:我是其作者)具有高效的功能,可以执行以下操作(以及相关功能):

import numpy_indexed as npi
uniques = npi.intersection(x, y)

请注意,此解决方案不使用哈希,而是使用序列元素的位相等;因此没有哈希冲突的风险,而且在实践中可能更快。在

相关问题 更多 >