【发布时间】:2017-01-15 03:31:18
【问题描述】:
我需要解决大量线性系统,在最小二乘意义上。我无法理解numpy.linalg.lstsq(a, b)、np.dot(np.linalg.pinv(a), b) 和数学实现的计算效率差异。
我使用以下矩阵:
h=np.random.random((50000,100))
a=h[:,:-1].copy()
b=-h[:,-1].copy()
算法的结果是:
# mathematical implementation
%%timeit
np.dot(np.dot(np.linalg.inv(np.dot(a.T,a)),a.T),b)
10 次循环,3 次取胜:36.3 毫秒 每个循环
# numpy.linalg.lstsq implementation
%%timeit
np.linalg.lstsq(a, b)[0]
10 个循环,3 个循环中的最佳:103 毫秒每个循环
%%timeit
np.dot(np.linalg.pinv(a), b)
1 次循环,3 次取胜:216 毫秒 每个循环
为什么会有差异?
【问题讨论】:
-
为什么它们应该是一样的?
-
在数学上它们返回相同的结果
-
@blaz 您是否希望进一步优化它们,或者您对这些方法是否满意并只是想了解时间差异?
-
我只是想先了解一下:)。
标签: python numpy least-squares