ブロックの合計をとって新しい小さな行列を作成することで、これを凝縮する必要がある大きな scipy スパース対称行列があります。
たとえば、4x4 疎行列の場合、AI は B[i,j] = sum(A[i:i+2,j:j+2]) である 2x2 行列 B を作成します。
現在、ブロックごとに圧縮されたマトリックスを再作成するだけですが、これは遅いです。これを最適化する方法についてのアイデアはありますか?
更新:これは正常に動作するサンプル コードですが、10.000x10.000 に凝縮したい 50.000x50.000 のスパース マトリックスでは遅いです:
>>> A = (rand(4,4)<0.3)*rand(4,4)
>>> A = scipy.sparse.lil_matrix(A + A.T) # make the matrix symmetric
>>> B = scipy.sparse.lil_matrix((2,2))
>>> for i in range(B.shape[0]):
... for j in range(B.shape[0]):
... B[i,j] = A[i:i+2,j:j+2].sum()