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