Berechnen Sie den euklidischen Abstand in der scipy csr Matrix

Ich muss den euklidischen Abstand zwischen allen Punkten, die in der csr-Matrix mit geringer Dichte gespeichert sind, und einigen Punktlisten berechnen. Es wäre für mich einfacher, den csr in einen dichten umzuwandeln, aber ich konnte es nicht, weil der Speicher nicht ausreichte. Daher muss ich ihn als csr beibehalten.

So zum Beispiel habe ich diese data_csr sparse Matrix (Ansicht in csr und dicht):

data_csr
(0, 2)  4
(1, 0)  1
(1, 4)  2
(2, 0)  2
(2, 3)  1
(3, 5)  1
(4, 0)  4
(4, 2)  3
(4, 3)  2

data_csr.todense()
[[0, 0, 4, 0, 0, 0]
 [1, 0, 0, 0, 2, 0]
 [2, 0, 0, 1, 0, 0]
 [0, 0, 0, 0, 0, 1]
 [4, 0, 3, 2, 0, 0]]

und dasCente Punktelisten:

center
array([[0, 1, 2, 2, 4, 1],
      [3, 4, 1, 2, 4, 0]])

Verwendung derscipy.spatial package, das euklidische Distanzarray zwischen data_csr undCente wird wie folgt aussehen. Also jeder Punkt, von insgesamt 6 Punkten, in jeder Reihe vonCente wurde für alle Zeilen in @ berechn data_csr. Die erste Zeile des Ergebnisfeldes (2,5) ist die ED zwischen der ersten Zeile vonCente und alle Zeilen in data_csr.

scipy.spatial.distance.cdist(center, data_csr, 'euclidean')

array([[ 5.09901951,  3.87298335,  5.19615242,  5.        ,  5.91607978],
      [ 7.34846923,  5.38516481,  5.91607978,  6.8556546 ,  6.08276253]])


Was ich bisher gelernt habe, dass ich die Nicht-Null-Werte sowie die Indizes erhalten kann mit:

data_csr.data
array([4, 1, 2, 2, 1, 1, 4, 3, 2])

data_csr.indices
array([2, 0, 4, 0, 3, 5, 0, 2, 3])

Aber ich kann immer noch nicht herausfinden, wie die ED zwischen diesen beiden Objekten berechnet wird.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage