Jaki jest najbardziej skuteczny sposób ustawiania wierszy na zera dla rzadkiej matrycy scipy?

Próbuję przekonwertować następujący kod MATLAB na Python i mam problem ze znalezieniem rozwiązania, które działa w rozsądnym czasie.

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

W tym przypadku a jest macierzą rzadką, a gdzie jest wektorem (podobnie jak we / wy). Rozwiązaniem używanym przez Pythona jest:

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)

Ale ponieważ A wynosi 334863 x 334863, to zajmuje to trzy minuty. Jeśli ktoś ma jakieś sugestie, jak to zrobić szybciej, prosimy o ich udostępnienie! Dla porównania MATLAB robi to samo niezauważalnie szybko.

Dzięki!

questionAnswers(2)

yourAnswerToTheQuestion