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