1

我需要解决(在最小二乘意义上)一大组(50,000)线性系统。每个这样的“系统”是Ax=B一个AN×K 矩阵,x一个 k×1 向量,而 B(显然)是一个 N×1 向量。(在我的例子中,N 是 50,000,K 是 ~10)。

numpy.linalg.lstsq 似乎是显而易见的选择,但由于文档不包含实现细节,我想知道内存和运行时性能:

lstsq 的运行时性能和内存要求是什么?

  1. 它会计算 A,A^T,将它们相乘,然后取逆,还是直接计算 A 的伪逆?
  2. 有没有办法直接计算结果的每个 X[i],从而节省内存?会用吗?
4

1 回答 1

5

文档将结果描述为包括奇异值和等级;强烈暗示它正在使用 SVD。

在我的笔记本电脑上进行的快速测试显示,在分配阵列 A 和 B 后,内存根本没有增加(由系统监视器报告)。

In [7]: A = np.random.randn(100000, 10)

In [8]: B = np.random.randn(100000)

In [9]: np.linalg.lstsq(A, B)
Out[9]: 
(array([ 0.00240061,  0.0017896 ,  0.00619928,  0.00010278, -0.00411501,
         0.00028532,  0.0003893 , -0.00042893,  0.00178326, -0.00444068]),
 array([ 99695.18278372]),
 10,
 array([ 318.37776275,  318.16578799,  317.82872616,  317.21981114,
         316.80987468,  315.63798002,  315.46574698,  314.73120345,
         313.99948001,  313.61503118]))
于 2012-12-08T11:36:18.910 回答