thr*_*use 5 python matlab numpy scipy
我试图在Python中复制我们通常使用Matlab进行的分析。某个步骤涉及使用反斜杠\(mldivide)运算符求解2个矩形矩阵的最小二乘问题(求解Ax = b中的x)。
我注意到在某些情况下,Matlab产生的结果与完全不同np.linalg.lstsq。如果我的矩阵A秩不足,那么A\b会给我一个警告,但也会给我一个答案,其中某些列设置为全零。
A = reshape(1:35,5,7);
b = [0.5, 0.4, 0.3, 0.2, 0.1]'
A\b
Warning: Rank deficient, rank = 2, tol = 1.147983e-13.
ans =
-0.1200
0
0
0
0
0
0.0200
Run Code Online (Sandbox Code Playgroud)
经过大量的挖掘,我了解到反斜杠运算符根据输入进行的操作非常不同A。我在这里找到了很好的描述:如何实现Matlab的mldivide(又称反斜杠运算符“ \”)。我也发现了一个与我自己类似的问题,但是存在平方矩阵:Numpy vs mldivide,“ \” matlab运算符。我的情况涉及矩形矩阵,所以有点不同。
当A为矩形时,\使用QR因式分解,我可以重现相同的解决方案,如下所示:
[Q,R] = qr(A);
R \ (Q'*b)
ans =
-0.1200
0
0
0
0
0
0.0200
Run Code Online (Sandbox Code Playgroud)
我知道这是第二次\被称为(for R\(Q'*b)),它使用反向替换来执行此操作。有人可以提供Matlab或python代码来执行此步骤吗?我已经找到了一些反替换的例子,但是它们似乎都是用于平方矩阵的。
我意识到我的任意示例都不是很现实,排名不足是一个问题,但是我的首要任务是尽可能地复制Matlab代码,以确认分析中的其他步骤已正确复制。
第二个问题是,是否有理由相信mldivideover 给出的答案lstsq?我知道这lstsq给出了最小的2范数解,这似乎是合适的,所以这在质量上与Matlab提供的有什么不同?
| 归档时间: |
|
| 查看次数: |
1579 次 |
| 最近记录: |