生成随机整数加权到中位数

时间:2011-03-31 16:17:35

标签: python math

在10-20范围内,返回15的可能性是两种极端的两倍。

4 个答案:

答案 0 :(得分:9)

您可以将random.triangular()与Python> = 2.6:

一起使用
n = random.triangular(10, 20)

n将是浮点值,因此您需要将其转换为int

答案 1 :(得分:1)

尝试看看它是否有效(对不起,如果它不可读):

import random

def randIntWeight(min, max):
  distanceFromMedian = random.uniform(0, (max - min) / 2.0)

  return (max - min) / 2.0 + distanceFromMedian * (-1) ** (random.randrange(-1, 0))

我还在琢磨我的概率论,所以纠正我,如果这不对。

答案 2 :(得分:0)

正如Blender所指出的,你真的需要更加具体。但在最简单的情况下,您可以从统一变量生成Triangular Distribution

答案 3 :(得分:0)

另一个内置函数是[numpy.random.normal][1]

  

numpy.random.normal(loc = 0.0,scale = 1.0,size = None)

     

从正态(高斯)分布中抽取随机样本。

您可以指定loc = 15.0来设置平均值,将scale = 2设置为5以使可能值的范围变窄或变宽。标度是可能的平均值的标准偏差数+/-(15)。它不允许您定义特定范围,但是如果输出超出某个范围,则始终可以将其输出并重新滚动。这为您提供了一种更细微的方式来获取特定值附近的值。

设置size=None以返回一个值。

来自https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.random.normal.html

mu, sigma = 0, 0.1 # mean and standard deviation 
s = np.random.normal(mu, sigma, 1000)
... (see link below for full code)
plt.show()

enter image description here