我运行带有循环的作业,每个循环多次调用statmodels .api. wls(版本0.6.1)。尽管我尽了最大的努力,但似乎statmodels拒绝放弃内存,最终占用了我所有的内存(32Gb)。我编写了下面的示例代码来演示这个问题。
有趣的是,如果问题的维度在1024 (n =<1024)。但是,如果n>= 1025,则该脚本的内存使用线性增加,而不限制。看起来像是statsmodel中的错误。API,但这可能是我对python的理解不足。
(交叉张贴:https://github.com/statsmodels/statsmodels/issues/2428)
#!/usr/bin/python
import resource
import numpy as np
import statsmodels.api as sm
if __name__ == "__main__":
n = 1025
mu, sigma = 0.0, 1.0
i = 0
print('i,memory')
while True:
x = np.random.normal(mu, sigma, n)
y = np.random.normal(mu, sigma, n)
w = np.random.random(n)
w /= w.sum()
regr1 = sm.WLS(y, x, w)
print(`i` + ',' + `resource.getrusage(resource.RUSAGE_SELF).ru_maxrss`)
i+=1
n=1024和n=1025的前10个值:
i N_1024 N_1025
0 60680 60812
1 60680 60848
2 60816 60988
3 60816 60996
4 60816 61016
5 60816 61028
6 60816 61040
7 60816 61064
8 60816 61080
9 60816 61084
10 60816 61092
我升级到numpy 1.9.1(从1.7.1),问题自动消失了