Поскольку Python3.6 существует метод choices
из модуля random
.
Python 3.6.1 (v3.6.1:69c0db5050, Mar 21 2017, 01:21:04)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.0.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: import random
In [2]: random.choices(
...: population=[['a','b'], ['b','a'], ['c','b']],
...: weights=[0.2, 0.2, 0.6],
...: k=10
...: )
Out[2]:
[['c', 'b'],
['c', 'b'],
['b', 'a'],
['c', 'b'],
['c', 'b'],
['b', 'a'],
['c', 'b'],
['b', 'a'],
['c', 'b'],
['c', 'b']]
И люди также упоминали, что есть numpy.random.choice
, которые поддерживают весы, НО не поддерживают 2d массивы и т. Д.
Итак, вы можете получить все, что захотите (см. обновление) с помощью встроенного random.choices
, если у вас есть 3.6.x Python .
UPDATE: As @roganjosh , random.choices
не может возвращать значения без замены, как упоминалось в docs :
Вернуть a
k
(g15) blockquote>И блестящий ответ @ ronan-paixão гласит, что
numpy.choice
имеет аргументreplace
, который управляет этим поведением.