从数组中选择一个非均匀分布的随机元素

时间:2019-03-15 00:16:00

标签: python numpy

我正在尝试从数组中随机选择数字。

我可以轻松地通过使用np.random.randint(len(myArray))来选择一个元素来做到这一点-但这给出了均匀的分布。

对于我的需要,我需要选择一个随机数,在数组的开头附近选择一个数字的可能性更高-因此,我认为像指数概率函数这样的东西更适合。

我是否可以使用指数(或其他非均匀分布)用作数组索引来生成范围为(1,1000)的随机整数?

1 个答案:

答案 0 :(得分:2)

您可以从NumPy向MultiPolygon([box(332833.5, 502144.0, 333214.5, 502460.5), box(333537.5, 502144.0, 333918.5, 502460.5)]) 模块分配指数概率向量。概率向量之和应为1,因此您可以将所有概率之和归一化。

choice

要确保随机分布遵循指数行为,可以绘制0到1000之间的100000次随机绘制。

import numpy as np
from numpy.random import choice

arr = np.arange(0, 1001)
prob = np.exp(arr/1000) # To avoid a large number
rand_draw = choice(arr, 1, p=prob/sum(prob))

enter image description here