Я хотел бы получить индексы уникальных векторов, используя hash (для матриц он эффективен), но np.intersect1d не дает индексов, он дает значения. С другой стороны, np.in1d дает индексы, но не уникальные. Я закрепил диктофон, чтобы он работал, но он не кажется наиболее эффективным. Я новичок в 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)
выход:
>>> [2, 3, 1]
[[4 5 6]
[7 8 9]
[1 2 3]]
У меня аналогичная проблема для np.unique(), где он не дает мне никаких индексов.
Получить индексы строки из [ 'ответов писал на этот вопрос'] (http://stackoverflow.com/questions/38674027/find-the-row-indexes-of-several-values-in-a-numpy-array) и просто индексируйте в первый массив с этими индексами для желаемого о/р. – Divakar