次の MATLAB コードを Python に変換しようとしていますが、適切な時間内に機能するソリューションを見つけるのに苦労しています。
M = diag(sum(a)) - a;
where = vertcat(in, out);
M(where,:) = 0;
M(where,where) = 1;
ここで、 a はスパース行列で、 where はベクトルです (in/out と同様)。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)
しかし、A は 334863x334863 なので、これには 3 分ほどかかります。これを高速化する方法について何か提案があれば、ぜひ投稿してください! 比較のために、MATLAB はこの同じステップを驚くほど高速に実行します。
ありがとう!