我必须执行此操作:
N = A'*P*A
P矩阵的结构是块对角线,而A矩阵很大程度上是稀疏的(也是带状结构)。乘法以块的形式执行。但问题是存储。
N矩阵太大而无法完整存储(尝试分配时内存不足)。所以,我想以稀疏的方式存储。虽然稀疏命令只生成行,列格式的值,但它是否可以应用于存储带有列列作为块索引的带状矩阵?
我在spalloc问题中尝试了this,但它没有帮助存储块的行和索引。 谢谢。
A P A'形成的图像
问题在于块。这些块本身很稀疏。因此,可以在保存时将块作为稀疏矩阵。 那么,如果一个块的行= 1且col = 1,那么可以这样做吗?
N(row,col) = sparse(A'*P*A)
答案 0 :(得分:1)
可能还有一些额外的技巧,但首先要尝试的是确保永远不会在内存中创建完整的矩阵N
。当前的问题是,如果您拨打sparse(A'*P*A)
,那么您需要多个A'*P
,然后(A'*P)
* A,然后才能使其稀疏并取出零。在使其稀疏之前,N
的整个非稀疏矩阵表示在内存中。要强制MATLAB更智能,请执行以下操作:
SA = sparse(A);
N = SA'*sparse(P)*SA;
whos N
您应该看到N是稀疏的,但更重要的是,每个乘法结果也是稀疏的,因为您将稀疏矩阵乘以稀疏矩阵。