Spec-Zone.ru › NumPy 1.20

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API