Spec-Zone.ru › NumPy 1.21

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.

Параметры
colorsпоследовательность целых чисел

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

nsampleцелое число

Количество выбранных элементов. nsample не должно превышать sum(colors).

sizeцелое число или кортеж целых чисел, необязательно

Количество генерируемых значений, целое число или кортеж, определяющий форму массива значений. Если заданный размер, например, (k, m), то генерируются k * m значений, где одно значение — вектор длины len(colors), а возвращаемое значение имеет форму (k, m, len(colors)). Если size — целое число, выходное значение имеет форму (size, len(colors)). По умолчанию None, в этом случае возвращается одно значение в виде массива с формой (len(colors),).

methodстрока, необязательно

Указывает алгоритм, используемый для генерации значений. Должен быть ‘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–2022 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.21/reference/random/generated/numpy.random.Generator.multivariate_hypergeometric.html

Spec-Zone.ru

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