gpt4 book ai didi

matlab - 在 Matlab 中以 block 的形式存储稀疏矩阵?

转载 作者:太空宇宙 更新时间:2023-11-03 20:07:04 26 4
gpt4 key购买 nike

我必须执行这个操作:

N = A'*P*A

P 矩阵的结构是 block 对角线,而 A 矩阵在很大程度上是稀疏的(也是带状结构)。乘法以 block 为单位执行。但问题是存储。

N 矩阵太大而无法完整存储(尝试分配时内存不足)。所以,我想以稀疏的方式存储。虽然sparse命令只生成行列格式的值,但它可以应用于存储以行列为 block 索引的带状矩阵吗?

我试过了spallocthis 中给出问题,但它没有帮助存储 block 的行和索引。谢谢。

enter image description hereA P A'形成的图像

问题出在 block 上。这些 block 本身是稀疏的。那么有没有可能在保存的同时将 block 本身做成稀疏矩阵。那么,如果一个 block 有一个row = 1和col = 1,那么可以这样做吗?

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

最佳答案

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

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

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

关于matlab - 在 Matlab 中以 block 的形式存储稀疏矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18704877/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com