繁体   English   中英

numpy.linalg.lstsq 太慢了

[英]numpy.linalg.lstsq too slow

我正在尝试将 numpy.linalg.lstsq 的性能与手动解决最小二乘问题进行比较。 我写了以下代码。

import numpy as np
import timeit

m,n = 400,10

A = np.random.rand(m,n)
b = np.random.rand(m)

t1 = timeit.timeit(lambda : np.linalg.inv(A.T@A) @ A.T @ b, number=100)
t2 = timeit.timeit(lambda : np.linalg.solve(A.T@A, A.T@b), number=100)
t3 = timeit.timeit(lambda : np.linalg.lstsq(A,b)[0], number=100)

print(t1)
print(t2)
print(t3)

令我惊讶的是,output 是

0.0040054810015135445
0.002654149997397326
0.010454912000568584

lstsq大约慢 5 倍。 为什么会这样?

lstsq您可能会看到它具有其他人没有的功能:

如果有多个最小化解,则返回具有最小 2 范数的解。

为了做到这一点,需要检查问题,有时需要使用伪逆来解决,而其他方法可以做其他事情,比如QR 分解

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM