4

我必须执行此操作:

N = A'*P*A

P 矩阵的结构是块对角线,而 A 矩阵很大程度上是稀疏的(也是带状结构)。乘法以块的形式进行。但问题是存储。

N 矩阵太大而无法完全存储(尝试分配时内存不足)。所以,我想以稀疏的方式存储。虽然 sparse 命令仅生成行、列格式的值,但是否可以将其应用于以行列作为块索引的带状矩阵的存储?

我已经尝试过在这个问题中给出的spalloc ,但它没有帮助存储块的行和索引。谢谢你。

在此处输入图像描述 AP A'形成的图像

问题在于块。这些块本身是稀疏的。那么是否可以在保存时将块本身制作为稀疏矩阵。那么,如果一个块有 row = 1 和 col = 1,那么可以这样做吗?

N(row,col) = sparse(A'*P*A)
4

1 回答 1

1

可能有一些额外的技巧可以玩,但首先要尝试的是确保N永远不会在内存中创建完整的矩阵。直接的问题是,如果你调用sparse(A'*P*A)then 你是多个A'*Pthen (A'*P)*A ,然后你才使它变得稀疏并取出零。在使其稀疏之前,整个非稀疏矩阵表示N都在内存中。要强制 MATLAB 变得更智能,请执行以下操作:

SA = sparse(A);
N =  SA'*sparse(P)*SA;
whos N

您应该看到 N 是稀疏的,但更重要的是,每个乘法结果也是稀疏的,因为您将稀疏矩阵乘以稀疏矩阵。

于 2013-09-10T17:13:21.783 回答