如何减少在matlab中计算大矩阵的伪逆的时间?

信息处理 matlab 矩阵
2022-02-13 19:07:53

我有一个矩阵

P = randn(45875x65536 );
Pi = pinv (P);

我试图在matlab中运行这段代码,但是需要很长时间

是否可以将矩阵拆分为更小的矩阵然后计算伪逆?

有什么减少时间的建议吗?

2个回答

长话短说:不。

如果可能的话,Matlab 可能已经在这样做了;在任何情况下,Matlab 文档pinv都说使用了奇异值分解方法这可能不是最快的方法,但它在许多情况下相对稳定P,所以它非常可取,除非你非常清楚你在做什么或者你P有特殊的结构(在这种情况下你可能不想使用Moore-Penrose Pseudoinverse 首先,也许?)。

更长的故事:通常,您将乘以Pi某物以执行逆运算P

引用Matlab 文档本身

您可以将 pinv 应用于向量 的大多数用法(如 )替换bpinv(A)*blsqminnorm(A,b)以获得线性方程组的最小范数最小二乘解。lsqminnorm通常比 更有效pinv,并且它还支持稀疏矩阵。

但是能否做到这一点取决于你使用 Moore-Penrose Pseudoinverse 的实际原因;并非所有用途都可以用其他东西代替。

您可以尝试使用 QR 分解。

https://en.wikipedia.org/wiki/QR_decomposition#Using_for_solution_to_linear_inverse_problems

matlab 有一个 qrupdate 例程,它也适用于稀疏矩阵。