Ich habe versucht, csc_matrix
und csr_matrix
aus einer Liste von (data, (rows, cols))
Werte wie in der Dokumentation vorgeschlagen initialisieren.Ignorieren doppelte Einträge in Sparse-Matrix
sparse = csc_matrix((data, (rows, cols)), shape=(n, n))
Das Problem besteht darin, dass das Verfahren, das ich habe tatsächlich zur Erzeugung des data
, rows
und cols
Vektoren Duplikate für einige Punkte führt. Standardmäßig fügt scipy die Werte der doppelten Einträge hinzu. In meinem Fall haben diese Duplikate jedoch genau denselben Wert in data
für eine gegebene (row, col)
.
Was ich versuche zu erreichen ist, scipy den zweiten Eintrag zu ignorieren, wenn bereits eins existiert, anstatt sie hinzuzufügen.
Wenn ich die Tatsache ignoriere, dass ich den Generierungsalgorithmus verbessern kann, um die Erzeugung von Duplikaten zu vermeiden, gibt es einen Parameter oder eine andere Möglichkeit, eine dünn besetzte Matrix zu erstellen, die Duplikate ignoriert?
Derzeit zwei Einträge mit data = [4, 4]; cols = [1, 1]; rows = [1, 1];
erzeugen eine Sparse-Matrix, den Wert bei (1,1)
8
, während der gewünschte Wert 4
ist.
>>> c = csc_matrix(([4, 4], ([1,1],[1,1])), shape=(3,3))
>>> c.todense()
matrix([[0, 0, 0],
[0, 8, 0],
[0, 0, 0]])
Ich bin auch bewusst, dass ich sie durch die Verwendung einer 2-dimensionale numpy unique
Funktion filtern können, aber Listen sind ziemlich groß, sodass dies nicht wirklich eine gültige Option ist.
Andere mögliche Antwort auf die Frage: Gibt es eine Möglichkeit zu spezifizieren, was mit Duplikaten zu tun? h. das min
oder max
anstelle des Standards sum
behalten?
Ich bin mir ziemlich sicher, die Antwort ist nein, es gibt keine eingebaute Möglichkeit, das Verhalten für Duplikate zu ändern. Sie sollten jedoch die Verwendung von 'np.unique' nicht zu schnell verwerfen: Egal, wie groß Ihre Listen sind, scipy wird sie in Arrays umwandeln und ähnliche Operationen unter der Haube durchführen, also gibt es keinen Grund, warum Sie das tun sollte nicht versuchen. – Jaime
'np.unique' ist 1d, daher erfordert die Handhabung dieser 2d-Koordinaten etwas zusätzlichen Aufwand. – hpaulj
Wahr, aber Tricks wie [dies] (http://stackoverflow.com/questions/16970982/find-unique-rows-in-numpy-array) machen es 2D. –