使用scipy.stats.rv_continuous时如何保持内存消耗?

时间:2017-04-03 09:39:14

标签: python numpy scipy

我正在使用scipy.stats.rv_continuous(v0.19.0)来创建自定义概率分布中的随机值。我使用的代码如下所示(使用Gaussian进行调试):

from scipy.stats import rv_continuous
import numpy as np
import resource
import scipy
import sys

print "numpy version: {}".format(np.version.full_version)
print "Scipy version: {}".format(scipy.version.full_version)
print "Python {}".format(sys.version)

class gaussian_gen(rv_continuous):
    "Gaussian distribution"
    def _pdf(self, x):
        return np.exp(-x**2 / 2.) / np.sqrt(2.0 * np.pi)

def print_mem():
    mem = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
    print 'Memory usage: %s (kb)' % mem

print_mem()
gaussian = gaussian_gen(name='gaussian')
print_mem()
values = gaussian.rvs(size=1000)
print_mem()
values = gaussian.rvs(size=5000)
print_mem()

哪个输出:

numpy version: 1.12.0
Scipy version: 0.19.0
Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609]
Memory usage: 69672 (kb)
Memory usage: 69672 (kb)
Memory usage: 426952 (kb)
Memory usage: 2215576 (kb)

正如您所看到的,此代码段的内存消耗似乎真的不合理。我找到了这个question,但它略有不同,因为我没有在循环中创建一个新的类实例。

我认为我正在使用rv_continuous,但我不明白为什么会消耗如此大量的内存。我该如何正确使用它?理想情况下,我希望有一个解决方案,我实际上可以在一个循环中调用,但一次只能一步。

0 个答案:

没有答案