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