numpy.random.Generator.multinomial
метод
-
Generator.multinomial(n, pvals, size=None) -
Генерация выборок из многочленного распределения.
Многочленное распределение — многомерное обобщение биномиального распределения. Представьте эксперимент с одним из
pвозможных исходов. Пример такого эксперимента — бросок игральной кости, где результатом может быть число от 1 до 6. Каждая выборка, извлечённая из распределения, представляетnтаких экспериментов. Её значения,X_i = [X_0, X_1, ..., X_p], представляют количество раз, когда результат былi.Параметры: -
n : int or array-like of ints -
Количество экспериментов.
-
pvals : sequence of floats, length p -
Вероятности каждого из
pразличных исходов. Они должны суммироваться до 1 (впрочем, последний элемент всегда предполагается учитывать оставшуюся вероятность, при условии, чтоsum(pvals[:-1]) <= 1)). -
size : int or tuple of ints, optional -
Форма выходных данных. Если заданная форма, например,
(m, n, k), тоm * n * kвыборок генерируются. По умолчанию None, в этом случае возвращается одно значение.
Возвращаемое значение: -
out : ndarray -
Сгенерированные выборки, формы size, если она была задана. Если нет, форма —
(N,).Другими словами, каждый элемент
out[i,j,...,:]представляет N-мерное значение, извлечённое из распределения.
Примеры
Бросок игральной кости 20 раз:
>>> rng = np.random.default_rng() >>> rng.multinomial(20, [1/6.]*6, size=1) array([[4, 1, 7, 5, 2, 1]]) # random
Она выпала 4 раза на 1, 1 раз на 2 и т.д.
Теперь бросим кость 20 раз, и ещё 20 раз:
>>> rng.multinomial(20, [1/6.]*6, size=2) array([[3, 4, 3, 3, 4, 3], [2, 4, 3, 4, 0, 7]]) # randomВ первом случае мы бросили 3 раза 1, 4 раза 2 и т.д. Во втором случае мы бросили 2 раза 1, 4 раза 2 и т.д.
Теперь проделаем один эксперимент, бросив кость 10 раз, и 10 раз снова, и ещё один эксперимент бросив кость 20 раз, и 20 раз снова:
>>> rng.multinomial([[10], [20]], [1/6.]*6, size=2) array([[[2, 4, 0, 1, 2, 1], [1, 3, 0, 3, 1, 2]], [[1, 4, 4, 4, 4, 3], [3, 3, 2, 5, 5, 2]]]) # randomПервый массив показывает результаты броска кости 10 раз, а второй — результаты броска 20 раз.
Нагруженная игральная кость с большей вероятностью выпадет на 6:
>>> rng.multinomial(100, [1/7.]*5 + [2/7.]) array([11, 16, 14, 17, 16, 26]) # random
Входы вероятности должны быть нормализованы. Как деталь реализации, значение последнего элемента игнорируется и предполагается, что оно занимает все оставшиеся вероятностные массы, но на это не следует полагаться. Усмеятая монета, которая имеет вдвое больше веса на одной стороне, чем на другой, должна быть сэмплирована так:
>>> rng.multinomial(100, [1.0 / 3, 2.0 / 3]) # RIGHT array([38, 62]) # random
а не так:
>>> rng.multinomial(100, [1.0, 2.0]) # WRONG Traceback (most recent call last): ValueError: pvals < 0, pvals > 1 or pvals contains NaNs
-
© 2005–2019 NumPy Developers
Licensed under the 3-clause BSD License.
https://docs.scipy.org/doc/numpy-1.17.0/reference/random/generated/numpy.random.Generator.multinomial.html