當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python numpy Generator.multivariate_hypergeometric用法及代碼示例


本文簡要介紹 python 語言中 numpy.random.Generator.multivariate_hypergeometric 的用法。

用法:

random.Generator.multivariate_hypergeometric(colors, nsample, size=None, method='marginals')

從多元超幾何分布生成變量。

多元超幾何分布是超幾何分布的推廣。

從具有 N 不同類型的集合中隨機選擇 nsample 項目而不進行替換。 Ncolors 的長度,colors 中的值是該類型在集合中的出現次數。集合中的項目總數為 sum(colors) 。此函數生成的每個隨機變量都是一個長度為 N 的向量,其中包含 nsample 項目中出現的不同類型的計數。

colors這個名字來自於對分布的常見說明:它是從裝有不同顏色彈珠的甕中無放回地選出的每種顏色彈珠數量的概率分布; colors[i] 是甕中顏色為 i 的彈珠數量。

參數

colors 整數序列

從中抽取樣本的集合中每種類型項目的數量。中的值colors必須是非負的。為了避免算法精度損失,sum(colors)必須小於10**9方法是“marginals”。

nsample int

選擇的項目數。 nsample 不得大於 sum(colors)

size int 或整數元組,可選

要生成的變量數,可以是整數或保存變量數組形狀的元組。例如,如果給定大小是 (k, m) ,則繪製 k * m 變量,其中一個變量是長度為 len(colors) 的向量,並且返回值的形狀為 (k, m, len(colors)) 。如果 size 是整數,則輸出的形狀為 (size, len(colors)) 。默認為無,在這種情況下,單個變量作為形狀為 (len(colors),) 的數組返回。

method 字符串,可選

指定用於生成變量的算法。必須是 ‘count’ 或 ‘marginals’(默認值)。有關這些方法的說明,請參閱注釋。

返回

variates ndarray

從多元超幾何分布中提取的變量數組。

注意

這兩種方法不返回相同的變量序列。

“count”算法大致相當於下麵的numpy代碼:

choices = np.repeat(np.arange(len(colors)), colors)
selection = np.random.choice(choices, nsample, replace=False)
variate = np.bincount(selection, minlength=len(colors))

“count” 算法使用長度為 sum(colors) 的臨時整數數組。

“marginals” 算法通過重複調用單變量超幾何采樣器來生成變量。它大致相當於:

variate = np.zeros(len(colors), dtype=np.int64)
# `remaining` is the cumulative sum of `colors` from the last
# element to the first; e.g. if `colors` is [3, 1, 5], then
# `remaining` is [9, 6, 5].
remaining = np.cumsum(colors[::-1])[::-1]
for i in range(len(colors)-1):
    if nsample < 1:
        break
    variate[i] = hypergeometric(colors[i], remaining[i+1],
                               nsample)
    nsample -= variate[i]
variate[-1] = nsample

默認方法是“marginals”。對於某些情況(例如,當顏色包含相對較小的整數時),“count” 方法可能比 “marginals” 方法快得多。如果算法的性能很重要,請使用典型輸入測試這兩種方法,以確定哪種方法效果最好。

例子

>>> colors = [16, 8, 4]
>>> seed = 4861946401452
>>> gen = np.random.Generator(np.random.PCG64(seed))
>>> gen.multivariate_hypergeometric(colors, 6)
array([5, 0, 1])
>>> gen.multivariate_hypergeometric(colors, 6, size=3)
array([[5, 0, 1],
       [2, 2, 2],
       [3, 3, 0]])
>>> gen.multivariate_hypergeometric(colors, 6, size=(2, 2))
array([[[3, 2, 1],
        [3, 2, 1]],
       [[4, 1, 1],
        [3, 2, 1]]])

相關用法


注:本文由純淨天空篩選整理自numpy.org大神的英文原創作品 numpy.random.Generator.multivariate_hypergeometric。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。