рисовать случайный элемент в numpy

У меня есть массив вероятностей элементов, скажем [0,1, 0,2, 0,5, 0,2] . Сумма массива до 1.0.

Используя простой Python или numpy, я хочу рисовать элементы пропорционально их вероятности: первый элемент примерно в 10% случаев, второй 20%, третий 50% и т. Д. «Draw» должен возвращать индекс нарисованного элемента.

Я придумал следующее:

def draw(probs):
    cumsum = numpy.cumsum(probs / sum(probs)) # sum up to 1.0, just in case
    return len(numpy.where(numpy.random.rand() >= cumsum)[0])

Это работает, но слишком запутано, должен быть способ получше. Спасибо.

7
задан Saullo G. P. Castro 28 August 2013 в 15:47
поделиться