本文簡要介紹 python 語言中 numpy.random.Generator.multivariate_hypergeometric
的用法。
用法:
random.Generator.multivariate_hypergeometric(colors, nsample, size=None, method='marginals')
從多元超幾何分布生成變量。
多元超幾何分布是超幾何分布的推廣。
從具有
N
不同類型的集合中隨機選擇nsample
項目而不進行替換。N
是colors
的長度,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]]])
相關用法
- Python numpy Generator.multivariate_normal用法及代碼示例
- Python numpy Generator.multinomial用法及代碼示例
- Python numpy Generator.standard_normal用法及代碼示例
- Python numpy Generator.bytes用法及代碼示例
- Python numpy Generator.shuffle用法及代碼示例
- Python numpy Generator.choice用法及代碼示例
- Python numpy Generator.random用法及代碼示例
- Python numpy Generator.logseries用法及代碼示例
- Python numpy Generator.uniform用法及代碼示例
- Python numpy Generator.standard_t用法及代碼示例
- Python numpy Generator.standard_cauchy用法及代碼示例
- Python numpy Generator.normal用法及代碼示例
- Python numpy Generator.poisson用法及代碼示例
- Python numpy Generator.power用法及代碼示例
- Python numpy Generator.geometric用法及代碼示例
- Python numpy Generator.laplace用法及代碼示例
- Python numpy Generator.vonmises用法及代碼示例
- Python numpy Generator.noncentral_f用法及代碼示例
- Python numpy Generator.gamma用法及代碼示例
- Python numpy Generator.weibull用法及代碼示例
- Python numpy Generator.gumbel用法及代碼示例
- Python numpy Generator.pareto用法及代碼示例
- Python numpy Generator.noncentral_chisquare用法及代碼示例
- Python numpy Generator.negative_binomial用法及代碼示例
- Python numpy Generator.binomial用法及代碼示例
注:本文由純淨天空篩選整理自numpy.org大神的英文原創作品 numpy.random.Generator.multivariate_hypergeometric。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。