【发布时间】:2016-10-21 03:19:37
【问题描述】:
不确定这个问题是属于这里还是交叉验证,但由于主要问题与编程语言相关,我将其发布在这里。
输入:
Y= 大 2D numpy 数组 (300000,30)
X= 一维数组 (30,)
期望的输出:
B= 1D array (300000,) 每个元素,其中 Y 的每一行(长度为 30 的元素)对 X 的回归系数
所以B[0] = scipy.stats.linregress(X,Y[0])[0]
我先尝试了这个:
B = scipy.stats.linregress(X,Y)[0]
希望它会根据 Y 的形状广播 X。接下来我自己广播 X 以匹配 Y 的形状。但是在这两种情况下,我都收到了这个错误:
File "C:\...\scipy\stats\stats.py", line 3011, in linregress
ssxm, ssxym, ssyxm, ssym = np.cov(x, y, bias=1).flat
File "C:\...\numpy\lib\function_base.py", line 1766, in cov
return (dot(X, X.T.conj()) / fact).squeeze()
MemoryError
我使用手动方法来计算 beta,根据 Sascha 的建议,下面也使用了 scipy.linalg.lstsq,如下所示
B = lstsq(Y.T, X)[0] # first estimate of beta
Y1=Y-Y.mean(1)[:,None]
X1=X-X.mean()
B1= np.dot(Y1,X1)/np.dot(X1,X1) # second estimate of beta
然而,两种对 beta 的估计是非常不同的:
>>> B1
Out[10]: array([0.135623, 0.028919, -0.106278, ..., -0.467340, -0.549543, -0.498500])
>>> B
Out[11]: array([0.000014, -0.000073, -0.000058, ..., 0.000002, -0.000000, 0.000001])
【问题讨论】:
标签: numpy multidimensional-array scipy out-of-memory linear-regression