Метод zipf
Метод zipf генератора случайных чисел
NumPy создает массив случайных чисел,
подчиняющихся распределению Ципфа.
Это распределение характеризуется параметром
формы a и описывает явления,
где вероятность события обратно пропорциональна
его рангу.
Параметр a должен быть больше единицы.
Чем больше значение a, тем быстрее убывает
вероятность с ростом ранга.
Синтаксис
generator.zipf(a, size=None)
Параметры метода:
-
a- параметр формы распределения (должен быть > 1); -
size- форма выходного массива (целое число или кортеж размеров).
Пример
Создадим генератор с фиксированным зерном
и сгенерируем массив из 10 чисел из распределения
Ципфа с параметром a = 2:
import numpy as np
rng = np.random.default_rng(0)
arr = rng.zipf(a=2, size=10)
print(arr)
Результат выполнения кода:
[1 1 1 2 1 1 1 7 1 1]
Как видно, большинство значений равны единице, что характерно для распределения Ципфа.
Пример
Сгенерируем двумерный массив случайных чисел
из распределения Ципфа с параметром
a = 3 размером 3x4:
import numpy as np
rng = np.random.default_rng(42)
arr = rng.zipf(a=3, size=(3, 4))
print(arr)
Результат выполнения кода:
[[1 1 2 1]
[1 1 1 1]
[1 1 1 1]]
Пример
Покажем, как меняется распределение в зависимости
от параметра a. Сгенерируем выборки
из 1000 элементов с разными значениями параметра
и посчитаем количество единиц:
import numpy as np
rng = np.random.default_rng(0)
size = 1000
ones_a2 = np.sum(rng.zipf(a=2, size=size) == 1)
ones_a3 = np.sum(rng.zipf(a=3, size=size) == 1)
ones_a5 = np.sum(rng.zipf(a=5, size=size) == 1)
print(ones_a2, ones_a3, ones_a5)
Результат выполнения кода:
596 819 913
Видно, что при увеличении параметра a
количество единиц растет, распределение
становится более сконцентрированным на малых
значениях.