python - 为什么 Numpy 和 Scipy QR 分解给我不同的值?
问题描述
我有以下向量。
x = np.array([[ 0.87695113],
[ 0.3284933 ],
[-0.35078323]])
当我调用 qr 的 numpy 版本时
from numpy.linalg import qr as qr_numpy
qr_numpy(x)
我得到
(array([[-0.87695113],
[-0.3284933 ],
[ 0.35078323]]), array([[-1.]]))
而当我运行 scipy 版本时,我得到了完全不同的东西。
from scipy.linalg import qr as qr_scipy
qr_scipy(x)
带输出
(array([[-0.87695113, -0.3284933 , 0.35078323],
[-0.3284933 , 0.94250897, 0.06139208],
[ 0.35078323, 0.06139208, 0.93444215]]), array([[-1.],
[ 0.],
[ 0.]]))
到底是怎么回事??
解决方案
默认mode
fornumpy.linalg.qr()
是'reduced'
而 for scipy.linalg.qr()
it 是'full'
.
因此,要获得相同的结果,请使用'economic'
scipy-qr 或'complete'
numpy-qr:
from numpy.linalg import qr as qr_numpy
qr_numpy(x)
(array([[-0.87695113],
[-0.3284933 ],
[ 0.35078323]]),
array([[-1.]]))
与 scipy-qr 的输出匹配:
from scipy.linalg import qr as qr_scipy
qr_scipy(x, mode='economic')
(array([[-0.87695113],
[-0.3284933 ],
[ 0.35078323]]),
array([[-1.]]))
并获得两者的“完整”版本:
from numpy.linalg import qr as qr_numpy
qr_numpy(x, mode='complete')
(array([[-0.87695113, -0.3284933 , 0.35078323],
[-0.3284933 , 0.94250897, 0.06139208],
[ 0.35078323, 0.06139208, 0.93444215]]),
array([[-1.],
[ 0.],
[ 0.]]))
from scipy.linalg import qr as qr_scipy
qr_scipy(x)
(array([[-0.87695113, -0.3284933 , 0.35078323],
[-0.3284933 , 0.94250897, 0.06139208],
[ 0.35078323, 0.06139208, 0.93444215]]),
array([[-1.],
[ 0.],
[ 0.]]))
推荐阅读
- python-3.x - Python子进程实时输出
- android - 无法在 Chrome 浏览器中打开指向 APK 文件的链接
- django - 如何在保存函数中发送请求错误?
- swift - 为什么索引超出范围
- html - 如何在 Node.js Express 和 mongodb 中使用 find() 获取 html 中选定选项的值
- django - Django - 从相关表中获取一个附加字段
- reactjs - 是否可以在 onChange 事件中获取输入的值
- python - for循环中的问题(python)
- python - 如何解决 OSError: [Errno 22] Invalid argument:
- sql-server - 等级和日期变化大小写表达式