我正在使用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,但我不明白为什么它会消耗如此巨大的内存。如何正确使用?理想情况下,我希望有一个解决方案,我可以在一个循环中调用,但一步一个步骤。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐