【发布时间】:2012-12-19 10:50:19
【问题描述】:
我有一个大的 scipy 稀疏对称矩阵,我需要通过对块求和来压缩它以生成一个新的更小的矩阵。
例如,对于 4x4 稀疏矩阵 A,我想创建一个 2x2 矩阵 B,其中 B[i,j] = sum(A[i:i+2,j:j+2])。
目前,我只是逐块重新创建压缩矩阵,但这很慢。关于如何优化它的任何想法?
更新:这是一个运行良好的示例代码,但对于我想压缩为 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()
【问题讨论】:
-
你试过用numpy的
A[i:i+2,j:j+2].sum()而不是python的sum吗? -
如何确定块大小?修复了吗?
-
@wim 其实我用的是稀疏矩阵求和。
-
@NPE 块大小不固定。是大矩阵大小的除数。
标签: python matrix scipy sparse-matrix