本文简要介绍 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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。