我有一个数据数组,例如:
[1000,800,700,650,630,500,370,350,310,250,210,180,150,100,80,50,30,20,15,12,10,8,6,3]
根据这些数据,我想生成适合相同分布的随机数。
我可以使用如下代码生成随机数:
dist = scipy.stats.gaussian_kde(data)
randomVar = np.floor(dist.resample()[0])
这将导致生成包含负数的随机数,我相信我可以很容易地进行转储而无需更改其余曲线的整体形状(我只是生成了足够的重采样,因此在转储负数之后我仍然有足够的用途)。
但是,由于原始数据仅是正值-并且堆积在该边界上,因此我最终得到一个kde,该kde在变为零之前的一小段距离内最高,但是随着它接近零而急剧下降。 ;而且KDE中的下降标记使我无法生成适当的数字。
我可以设置较低的带宽,以便获得一个更接近零的尖角,但是由于原始数据量少,它最终在其他地方锯齿。不幸的是,较高的带宽会在消除向下的滴答声之前隐藏曲线的形状。
答案 0 :(得分:0)
正如希尔伯特的《饮酒问题》中的评论所广泛建议的那样,真正的解决方案是找到适合参数的更好的分布。就我而言,Chi-Squared既适合曲线的形状,又适合于仅取正值的事实。
但是,在评论中Stelios提出了使用scipy.stats.rv_histogram的好建议,我曾经使用过并且对此感到满意。尽管有两个问题,这使我能够精确地拟合曲线到数据: