Python 获取两个集合的唯一交集值

Python 获取两个集合的唯一交集值,python,numpy,hash,intersection,Python,Numpy,Hash,Intersection,我希望使用哈希(对于矩阵,它是有效的)获得唯一向量的索引,但np.intersect1d不提供索引,它提供值。另一方面,np.INAD确实给出了指数,但不是唯一的指数。我拉了一个dict的拉链使它工作,但它似乎不是最有效的。我是python新手,所以尝试看看是否有更好的方法来实现这一点。谢谢你的帮助 代码: 输出: >>> [2, 3, 1] [[4 5 6] [7 8 9] [1 2 3]] 对于np.unique(),我遇到了一个类似的问题,它没有给我任何索引。该包(

我希望使用哈希(对于矩阵,它是有效的)获得唯一向量的索引,但np.intersect1d不提供索引,它提供值。另一方面,np.INAD确实给出了指数,但不是唯一的指数。我拉了一个dict的拉链使它工作,但它似乎不是最有效的。我是python新手,所以尝试看看是否有更好的方法来实现这一点。谢谢你的帮助

代码:

输出:

>>> [2, 3, 1]
[[4 5 6]
 [7 8 9]
 [1 2 3]]
对于np.unique(),我遇到了一个类似的问题,它没有给我任何索引。

该包(免责声明:我是它的作者)具有执行类似操作的有效功能(以及相关功能):


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

使用np.unique的return\u index属性为in1d给定的唯一值返回标志

代码:

输出:

x= [[1 2 3]
 [1 2 3]
 [4 5 6]
 [7 8 9]]
unique_idx= [3 0]
x[unique_idx]= [[7 8 9]
 [1 2 3]]

从中获取行索引,并仅使用所需o/p的索引索引到第一个数组中。我通过conda install numpy indexed-c conda forge下载,但我仍然得到ImportError:没有名为“numpy_indexed”的模块奇怪。。。当你在你的环境中调用conda list时,它被列出了吗?我自己刚刚使用“conda create-n testnpi python numpy indexed”创建了一个新的conda env,这就是我调用conda list时得到的结果:“numpy indexed 0.3.4 py35_0 conda forge”;导入numpy_索引工作正常。你最近运行过“conda update conda”吗?嗯,是的,我尝试过,但我得到了这个:rik@rik-MS-7971:~$conda create-n testnpi python numpy索引获取包元数据。。。。。。。正在解决程序包规范:。PackageNotFoundError:未找到包:“”当前linux-64频道中缺少包:-numpy索引您可以使用anaconda search在anaconda.org上搜索包-t conda numpy indexedSorry a但新手不确定如何执行此操作
import numpy_indexed as npi
uniques = npi.intersection(x, y)
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])
x= [[1 2 3]
 [1 2 3]
 [4 5 6]
 [7 8 9]]
unique_idx= [3 0]
x[unique_idx]= [[7 8 9]
 [1 2 3]]