KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I'm trying to create a distribution based on some data I have, then draw randomly from that distribution. Here's what I have: from scipy import stats import numpy def getDistribution(data): kernel = stats.gaussian_kde(data) class rv(stats.rv_continuous): def _cdf(self, x): return kernel.integrate_box_1d(-numpy.Inf, x) return rv() if __name__ == "__main__": # pretend this is real data data = numpy.concatenate((numpy.random.normal(2,5,100), numpy.random.normal(25,5,100))) d = getDistribution(data) print d.rvs(size=100) # this usually fails I think this is doing what I want it to, but I frequently get an error (see below) when I try to do d.rvs() , and d.rvs(100) never works. Am I doing something wrong? Is there an easier or better way to do this? If it's a bug in scipy, is there some way to get around it? Finally, is there more documentation on creating custom distributions somewhere? The best I've found is the scipy.stats.rv_continuous documentation, which is pretty spartan and contains no useful examples. The traceback: Traceback (most recent call last): File "testDistributions.py", line 19, in print d.rvs(size=100) File "/usr/local/lib/python2.6/dist-packages/scipy-0.10.0-py2.6-linux-x86_64.egg/scipy/stats/distributions.py", line 696, in rvs vals = self._rvs(*args) File "/usr/local/lib/python2.6/dist-packages/scipy-0.10.0-py2.6-linux-x86_64.egg/scipy/stats/distributions.py", line 1193, in _rvs Y = self._ppf(U,*args) File "/usr/local/lib/python2.6/dist-packages/scipy-0.10.0-py2.6-linux-x86_64.egg/scipy/stats/distributions.py", line 1212, in _ppf return self.vecfunc(q,*args) File "/usr/local/lib/python2.6/dist-packages/numpy-1.6.1-py2.6-linux-x86_64.egg/numpy/lib/function_base.py", line 1862, in call theout = self.thefunc(*newargs) File "/usr/local/
Tags (comma-separated)
Save Edits
Cancel