我需要python中的函数randgen(f, N)
,从给定的pdf生成N个示例
我是这么写的:
import numpy as np
import matplotlib.pyplot as plt
def randgen(f,N, M=1):
sample = M*np.random.random(N)
y=[]
sum = 0
for x in sample:
v = f(x);
sum+=v;
y.append(v)
y = y/sum;
return np.random.choice(sample, p=y, size=N)
def pp(x):
return x**2
z = randgen(pp, 2000)
plt.hist(z)
它为函数y=x^2
生成以下直方图。好像有用
我也看到过类似的问题,但是没有明确提到randgen(f,N)
的函数定义,它可以接受任意函数。我想知道我的方法是正确的还是漏掉了一点
好的,要解开你的解决方案:
你这样做的方式绝对符合概率密度函数的标准,你的解决方案应该是正确的,但可以通过使用均匀间隔的数字来计算你的pdf来改进它
linspace(start,stop,N)在start和stop之间生成N个等距的数字(https://docs.scipy.org/doc/numpy/reference/generated/numpy.linspace.html)
如果您应用我建议的加法而不是
,则您的解决方案适用于离散PDF 样本=M*np.random.random(N)
示例=np.linspace(开始、停止、N)
编辑:pdf也有一个要求,即概率必须是正的,所以应该包含一些机制来避免负的 范围[0,1]内x的函数值
相关问题 更多 >
编程相关推荐