我有一个大的矩形可逆矩阵 M(大约 5000x5000),并且我有一个循环,在其中我为每次迭代 i 执行以下操作(大约有 6000 次迭代):
- 我得到一个子空间 S_i(在我的问题中,它始终是标准基的子集;例如,“维度 3、300 和 3723”;这些子空间将包含原始 5000 个维度中的大约 100 个)。我无法控制我将被赋予哪个子空间,而且它不是随机的;一些维度比其他维度更“流行”,并且往往会更频繁地出现在 S_i 中。在我的问题中,S_i 不太可能恰好是 M 的不变子空间。
- 计算矩形矩阵 N_i,它只是矩阵 N_i 到 S_i 的限制(即从 M 开始,然后删除除子空间对应的矩阵之外的所有行和列;例如,删除除子空间之外的所有行和列)对于 3、300、3723 并删除除 3、300 和 3723 之外的所有列)
- 取逆 N_i^-1
例如,如果矩阵 M 是:
1 2 3
4 0 6
7 8 9
并且某些特定迭代的子空间是维度{1,2}(基于一的索引),那么 N_i 是:
1 2
4 0
并且此迭代所需的逆是:
0 0.25
0.5 -0.125
我觉得也许,因为我一遍又一遍地取同一个原始矩阵 M 的部分的逆,而且因为许多行和列的选择比其他行和列更频繁,这 6000 个之间可能存在一些共享计算迭代,特别是在计算逆时的第 3 步。有没有更有效的方法来做到这一点?