我有一个矩阵
P = randn(45875x65536 );
Pi = pinv (P);
我试图在matlab中运行这段代码,但是需要很长时间
是否可以将矩阵拆分为更小的矩阵然后计算伪逆?
有什么减少时间的建议吗?
我有一个矩阵
P = randn(45875x65536 );
Pi = pinv (P);
我试图在matlab中运行这段代码,但是需要很长时间
是否可以将矩阵拆分为更小的矩阵然后计算伪逆?
有什么减少时间的建议吗?
长话短说:不。
如果可能的话,Matlab 可能已经在这样做了;在任何情况下,Matlab 文档pinv
都说使用了奇异值分解方法;这可能不是最快的方法,但它在许多情况下相对稳定P
,所以它非常可取,除非你非常清楚你在做什么或者你P
有特殊的结构(在这种情况下你可能不想使用Moore-Penrose Pseudoinverse 首先,也许?)。
更长的故事:通常,您将乘以Pi
某物以执行逆运算P
。
引用Matlab 文档本身:
您可以将 pinv 应用于向量 的大多数用法(如 )替换
b
为pinv(A)*b
,lsqminnorm(A,b)
以获得线性方程组的最小范数最小二乘解。lsqminnorm
通常比 更有效pinv
,并且它还支持稀疏矩阵。
但是你能否做到这一点取决于你使用 Moore-Penrose Pseudoinverse 的实际原因;并非所有用途都可以用其他东西代替。
您可以尝试使用 QR 分解。
https://en.wikipedia.org/wiki/QR_decomposition#Using_for_solution_to_linear_inverse_problems
matlab 有一个 qrupdate 例程,它也适用于稀疏矩阵。