如果您想要单峰分布(其中偏差只是集中在你的数字范围的一个特定值上,例如,当你指出3)时,那么由安德鲁·库克提供的答案很好---主要是因为它允许你非常准确地微调偏差。
如果你想要做出一些偏差 - 例如你想要一个三重分布,数字a,(a + b)/ 2和b比其他人更频繁,那么你会很好地执行加权随机选择。
的简单算法为这个在a recent question on StackOverflow给出;它的复杂性是线性的。使用这样的算法,则只需保持的列表,初始含{A,A + 1,A + 2,...,B-1,B}(因此尺寸B-A的+ 1),并且当要为X增加一个偏见,你会将X的几个副本列入清单---取决于你想要偏向多少。然后你从列表中选择一个随机项目。
如果你想要的东西更有效,最快捷的方法被称为这是implemented very clearly in Python by Denis Bzowy“别名法”;一旦你的阵列已经预处理,它在固定时间运行(但是这意味着,一旦你做预处理,你不能再更新偏见---或者你会重新处理表)。
缺点与这两种技术是,不像与高斯分布,朝偏压X,不会偏压也有所朝X-1和X + 1。要模拟这种效果,你将不得不做一些事情,如
def addBias(x, L):
L = concatList(L, [x, x, x, x, x])
L = concatList(L, [x+2])
L = concatList(L, [x+1, x+1])
L = concatList(L, [x-1,x-1,x-1])
L = concatList(L, [x-2])
你的R有多大? –
很小。不大于100. – MxyL
抱歉,错误的答案;错过了这是一个整数。你只是想要一些“任意”的转换,还是必须有明确的属性(如mean和sd等于足够大的样本给出的那些)? –