使用时如何防止内存消耗scipy.stats.rv\u连续?

2024-04-26 23:50:42 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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\u continuous,但我不明白为什么它会消耗如此巨大的内存。如何正确使用?理想情况下,我希望有一个解决方案,我可以在一个循环中调用,但一步一个步骤。你知道吗


Tags: importnumpyformatkbversionnpusagescipy