Sto cercando di trovare un modo efficiente per trovare intersezioni di riga di due np.arrays
.Trovare in modo efficiente intersezioni di righe di due array numpy 2-D
Due matrici hanno le stesse forme e non possono verificarsi valori duplicati in ogni riga.
Ad esempio:
import numpy as np
a = np.array([[2,5,6],
[8,2,3],
[4,1,5],
[1,7,9]])
b = np.array([[2,3,4], # one element(2) in common with a[0] -> 1
[7,4,3], # one element(3) in common with a[1] -> 1
[5,4,1], # three elements(5,4,1) in common with a[2] -> 3
[7,6,9]]) # two element(9,7) in common with a[3] -> 2
mio output desiderato è: np.array([1,1,3,2])
E 'facile da fare questo con un ciclo:
def get_intersect1ds(a, b):
result = np.empty(a.shape[0], dtype=np.int)
for i in xrange(a.shape[0]):
result[i] = (len(np.intersect1d(a[i], b[i])))
return result
Risultato:
>>> get_intersect1ds(a, b)
array([1, 1, 3, 2])
Ma esiste un modo più efficiente per farlo?
Hmm. 'A' e' b' hanno valori duplicati in ogni riga? – YXD
@MrE buon punto, i duplicati non possono accadere. Grazie. – Akavall
Quanto ci si aspetta che gli array di input siano? –