numpy.random.Generator.multivariate_hypergeometric
метод
-
random.Generator.multivariate_hypergeometric(colors, nsample, size=None, method='marginals') -
Генерировать выборки из многомерного гипергеометрического распределения.
Многомерное гипергеометрическое распределение является обобщением гипергеометрического распределения.
Выберите
nsampleэлементов случайным образом без возвращения из коллекции сNразличными типами.N— длинаcolors, а значения вcolors— количество вхождений каждого типа в коллекции. Общее количество элементов в коллекции —sum(colors). Каждая случайная выборка, сгенерированная этой функцией, представляет собой вектор длиныN, содержащий счётчики различных типов, встречающихся вnsampleэлементах.Название
colorsпроисходит из распространённого описания распределения: это распределение количества шариков каждого цвета, выбранных без возвращения из урны, содержащей шарики разных цветов;colors[i]— количество шариков в урне с цветомi.- Параметры
-
-
colorssequence of integers -
Количество каждого типа элементов в коллекции, из которой производится выборка. Значения в
colorsдолжны быть неотрицательными. Для предотвращения потери точности в алгоритме,sum(colors)должно быть меньше10**9приmethodравном «маргиналы». -
nsampleint -
Количество выбранных элементов.
nsampleне должно быть большеsum(colors). -
sizeint or tuple of ints, optional -
Количество выборок для генерации, либо целое число, либо кортеж, содержащий форму массива выборок. Если заданный размер, например,
(k, m), то генерируютсяk * mвыборок, где одна выборка — это вектор длиныlen(colors), а возвращаемое значение имеет форму(k, m, len(colors)). Еслиsize— целое число, вывод имеет форму(size, len(colors)). По умолчанию None, в этом случае возвращается одна выборка как массив с формой(len(colors),). -
methodstring, optional -
Указывает алгоритм, используемый для генерации выборок. Должно быть ‘count’ или ‘marginals’ (по умолчанию). См. Примечания для описания методов.
-
- Возвращает
-
-
variatesndarray -
Массив выборок, взятых из многомерного гипергеометрического распределения.
-
См. также
-
hypergeometric -
Генерация выборок из (одномерного) гипергеометрического распределения.
Примечания
Два метода не возвращают одинаковую последовательность выборок.
Алгоритм “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”. В некоторых случаях (например, когда
colorsсодержит относительно небольшие целые числа), метод “count” может быть значительно быстрее метода “marginals”. Если производительность алгоритма важна, протестируйте оба метода с типичными входными данными, чтобы выбрать лучший вариант.Новое в версии 1.18.0.
Примеры
>>> 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]]])
© 2005–2021 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.20/reference/random/generated/numpy.random.Generator.multivariate_hypergeometric.html