numpy.random.multinomial#

random.multinomial(n, pvals, size=None)#

從多項式分佈中抽取樣本。

多項式分佈是二項式分佈的多變量推廣。考慮一個具有 p 種可能結果的實驗。例如,擲骰子,結果可能是 1 到 6。從分佈中抽取的每個樣本代表 n 次此類實驗。它的值 X_i = [X_0, X_1, ..., X_p] 表示結果為 i 的次數。

注意

新程式碼應使用 multinomial 方法,此方法屬於 Generator 實例;請參閱快速入門

警告

此函式預設為 C-long dtype,在 Windows 上為 32 位元,在 64 位元平台上則為 64 位元(在 32 位元平台上則為 32 位元)。自 NumPy 2.0 起,NumPy 的預設整數在 32 位元平台上為 32 位元,在 64 位元平台上為 64 位元。

參數:
nint

實驗次數。

pvalsfloat 序列,長度 p

每個 p 種不同結果的機率。這些機率總和必須為 1(但是,只要 sum(pvals[:-1]) <= 1),最後一個元素始終被假定為佔剩餘的機率)。

sizeint 或 int 元組,選用

輸出形狀。如果給定的形狀為,例如 (m, n, k),則會抽取 m * n * k 個樣本。預設值為 None,在這種情況下,會傳回單一值。

傳回值:
outndarray

抽取的樣本,如果提供了 size,則形狀為 size。否則,形狀為 (N,)

換句話說,每個條目 out[i,j,...,:] 都是從分佈中抽取的 N 維值。

另請參閱

random.Generator.multinomial

新程式碼應使用此方法。

範例

擲骰子 20 次

>>> np.random.multinomial(20, [1/6.]*6, size=1)
array([[4, 1, 7, 5, 2, 1]]) # random

結果落在 1 的次數為 4 次,落在 2 的次數為 1 次,依此類推。

現在,擲骰子 20 次,再擲 20 次

>>> np.random.multinomial(20, [1/6.]*6, size=2)
array([[3, 4, 3, 3, 4, 3], # random
       [2, 4, 3, 4, 0, 7]])

對於第一次執行,我們擲出 1 的次數為 3 次,2 的次數為 4 次,依此類推。對於第二次,我們擲出 1 的次數為 2 次,2 的次數為 4 次,依此類推。

灌鉛骰子更可能落在數字 6 上

>>> np.random.multinomial(100, [1/7.]*5 + [2/7.])
array([11, 16, 14, 17, 16, 26]) # random

機率輸入應標準化。作為實作細節,最後一個條目的值會被忽略,並假定佔據任何剩餘的機率質量,但不應依賴此行為。一個有偏差的硬幣,其中一面的權重是另一面的兩倍,應該像這樣取樣

>>> np.random.multinomial(100, [1.0 / 3, 2.0 / 3])  # RIGHT
array([38, 62]) # random

而不是像這樣

>>> np.random.multinomial(100, [1.0, 2.0])  # WRONG
Traceback (most recent call last):
ValueError: pvals < 0, pvals > 1 or pvals contains NaNs