Spec-Zone.ru › NumPy 1.19

numpy.random.Generator.multivariate_hypergeometric

method

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

Генерация значений из многомерного гипергеометрического распределения.

Многомерное гипергеометрическое распределение является обобщением гипергеометрического распределения.

Случайно выбираются nsample элементов без возвращения из множества с N различными типами. N — длина colors, а значения в colors — количество вхождений каждого типа в множестве. Общее количество элементов в множестве — sum(colors). Каждое генерируемое случайное значение — это вектор длиной N, содержащий счётчики различных типов, присутствующих в nsample выбранных элементах.

Название colors происходит из распространённого описания распределения: это распределение количества шаров каждого цвета, выбранных без возвращения из урны, содержащей шары разных цветов; colors[i] — количество шаров в урне цвета i.

Parameters
colorssequence of integers

Количество каждого типа элементов в множестве, из которого производится выборка. Значения в colors должны быть неотрицательными. Для избежания потери точности в алгоритме, sum(colors) должно быть меньше 10**9 при method равном “marginals”.

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’ (по умолчанию). См. Примечания для описания методов.

Returns
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”. Если производительность алгоритма важна, протестируйте оба метода с типичными входными данными, чтобы определить, какой из них лучше работает.

New in version 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–2020 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.18/reference/random/generated/numpy.random.Generator.multivariate_hypergeometric.html

Spec-Zone.ru

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