我需要为给定的范围(例如: low= 1,high =10)和size = 100生成一个倾斜分布。stats.skewnorm可以产生偏斜分布,但它不接受下界和上界的参数。谁能帮帮我。
def skewed_data(low, high, number):
skew_parameter = 5
data = skewnorm.rvs(skew_parameter, loc=1, scale=1, size=number)
data = np.round(data,0).astype(int)
return data
result_data = skewed_data(1, 10,100)
bins = np.linspace(0, 10, 10)
plt.hist(response, bins, alpha=1, label='histogram')
plt.legend(loc='upper right')
plt.show()结果数据的直方图如下所示(所有结果数据都在1到5之间,而我希望它分布在1到10之间,并向右倾斜。

发布于 2021-10-06 19:22:31
有很多不对称的分布,事实上是无限的。如果你想要一个在最小和最大值上有保证的,一个简单且容易生成的可能性是triangular distribution。通过指定最小、最大和模式(最可能的结果)来参数化三角形。除了min和max之间的中点之外,mode的任何值都将产生偏斜度。如果希望结果右偏于1和10之间,请分别使用像1、10和3这样的值作为最小、最大和模式。
三角分布可以通过random module或numpy获得。
如果三角形分布对您来说过于分段线性和尖端,另一种选择可能是beta distribution。Beta是在范围0,1上定义的,因此您需要缩放和移位才能获得其他范围。
测试版可以通过numpy/scipy获得。
https://stackoverflow.com/questions/69470685
复制相似问题