numpy.random.Generator.multinomial
метод
- random.Generator.multinomial(n, pvals, size=None)
-
Генерация выборок из многомерного распределения.
Многомерное распределение — это многомерное обобщение биномиального распределения. Рассмотрим эксперимент с одним из
pвозможных исходов. Примером такого эксперимента является подбрасывание игральной кости, где результат может быть от 1 до 6. Каждая выборка, полученная из распределения, представляетnтакие эксперименты. Его значения,X_i = [X_0, X_1, ..., X_p], представляют количество раз, когда результат былi.- Параметры:
-
- nint или массив-подобный объект int
-
Количество экспериментов.
- pvalsмассив-подобный объект float
-
Вероятности каждого из
pразличных исходов с формой(k0, k1, ..., kn, p). Каждый элементpvals[i,j,...,:]должен суммироваться до 1 (однако последний элемент всегда предполагается учитывать оставшуюся вероятность, до тех пор, покаsum(pvals[..., :-1], axis=-1) <= 1.0. Должен иметь по крайней мере 1 измерение, где pvals.shape[-1] > 0. - sizeint или кортеж из int, необязательно
-
Форма выходных данных. Если заданная форма, например,
(m, n, k), тогдаm * n * kвыборок генерируются, каждая изpэлементов. По умолчанию None, где размер выходных данных определяется по форме векторизацииnи по всем по последнему измерениюpvals, что обозначается какb=(b0, b1, ..., bq). Если size не None, то он должен быть совместим с формой векторизацииb. В частности, размер должен иметьqили более элементов, и size[-(q-j):] должен равнятьсяbj.
- Возвращает:
-
- outndarray
-
Сгенерированные выборки, с формой size, если задано. Когда size задан, форма выходных данных size + (p,) Если не указано, форма определяется формой векторизации
nиpvals,(b0, b1, ..., bq)дополненной измерением многомерного распределения,p, так что форма выходных данных(b0, b1, ..., bq, p).Каждый элемент
out[i,j,...,:]являетсяp-мерным значением, полученным из распределения.Изменено в версии 1.22.0: Добавлена поддержка векторизации
pvalsотносительно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, 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
Моделирование 10 подбрасываний 4-сторонней кости и 20 подбрасываний 6-сторонней кости
>>> rng.multinomial([10, 20],[[1/4]*4 + [0]*2, [1/6]*6]) array([[2, 1, 4, 3, 0, 0], [3, 3, 3, 6, 1, 4]], dtype=int64) # randomГенерация категориальных случайных величин из двух категорий, где первая имеет 3 исхода, а вторая — 2.
>>> rng.multinomial(1, [[.1, .5, .4 ], [.3, .7, .0]]) array([[0, 0, 1], [0, 1, 0]], dtype=int64) # randomargmax(axis=-1)затем используется для возврата категорий.>>> pvals = [[.1, .5, .4 ], [.3, .7, .0]] >>> rvs = rng.multinomial(1, pvals, size=(4,2)) >>> rvs.argmax(axis=-1) array([[0, 1], [2, 0], [2, 1], [2, 0]], dtype=int64) # randomТакой же размер выходных данных можно получить с помощью векторизации.
>>> rvs = rng.multinomial([[1]] * 4, pvals) >>> rvs.argmax(axis=-1) array([[0, 1], [2, 0], [2, 1], [2, 0]], dtype=int64) # 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–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/reference/random/generated/numpy.random.Generator.multinomial.html