Qual é a maneira mais eficiente de definir a linha como zeros para uma matriz escassa esparsa?

Eu estou tentando converter o seguinte código MATLAB para Python e estou tendo problemas para encontrar uma solução que funciona em qualquer quantidade de tempo razoável.

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

Aqui, a é uma matriz esparsa e onde é um vetor (como são in / out). A solução que eu tenho usando o Python é:

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)

Mas como A é 334863x334863, isso leva três minutos. Se alguém tiver alguma sugestão sobre como fazer isso mais rápido, por favor, contribua com eles! Para comparação, o MATLAB faz esse mesmo passo de maneira imperceptível e rápida.

Obrigado!

questionAnswers(2)

yourAnswerToTheQuestion