Was ist die effizienteste Methode, um Zeilen für eine spärliche Scipy-Matrix auf Null zu setzen?

Ich versuche, den folgenden MATLAB-Code in Python zu konvertieren, und habe Probleme, eine Lösung zu finden, die in angemessener Zeit funktioniert.

M = diag(sum(a)) - a;
where = vertcat(in, out);
M(where,:) = 0;
M(where,where) = 1;

Hier ist a eine spärliche Matrix und wo ist ein Vektor (wie in / out). Die Lösung, die ich mit Python habe, ist:

M = scipy.sparse.diags([degs], [0]) - A
where = numpy.hstack((inVs, outVs)).astype(int)
M = scipy.sparse.lil_matrix(M)
M[where, :] = 0  # This is the slowest line
M[where, where] = 1
M = scipy.sparse.csc_matrix(M)

Da A jedoch 334863x334863 ist, dauert dies ungefähr drei Minuten. Wenn jemand Vorschläge hat, wie man das schneller machen kann, dann bring sie bitte ein! Zum Vergleich macht MATLAB diesen Schritt unmerklich schnell.

Vielen Dank!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage