2025, Nov 19 09:02
Как получить воспроизводимые случайные точки в [0,1]×[0,1] с NumPy
Генерируйте воспроизводимые точки в [0,1]×[0,1] с NumPy: создайте default_rng с seed и получите массив через random — простой детерминированный подход.
Генерация воспроизводимых случайных координат в единичном квадрате — задача вполне обычная, но без контроля над источником случайности она быстро превращается в проблему. Цель проста: отобрать точки в [0, 1] x [0, 1] и иметь возможность позже получить в точности тот же массив.
Постановка задачи
Массив точек можно получить прямым вызовом API генератора случайных чисел. Это работает, но не фиксирует последовательность для следующих запусков.
import numpy as np
count_pts = 10
picked = np.random.random((count_pts, 2))
Так мы получаем корректный набор координат, где каждая строка — это точка внутри единичного квадрата.
Что здесь происходит
В примере выше выборка опирается на генератор уровня модуля. Для разового прогона этого достаточно, но о воспроизводимости речи нет. Чтобы повторять точный результат, нужен экземпляр генератора с заданным зерном (seed) и вызов его собственного метода для получения чисел.
Решение: используйте метод random у генератора
Создайте генератор с фиксированным seed и вызывайте его метод random, чтобы получить данные той же формы. На этом всё изменение и заканчивается.
import numpy as np
count_pts = 10
prng = np.random.default_rng(1949)
picked = prng.random((count_pts, 2))
С таким подходом массив точек стабильно воспроизводится для одного и того же seed.
Зачем это важно
Детерминированная выборка делает отладку и проверку предсказуемыми. Когда поток случайных чисел привязан к seed и вы берёте числа из одного источника, результаты легко перепроверять и сравнивать без догадок.
Вывод
Нужны воспроизводимые случайные координаты? Создайте генератор с seed и получайте значения через его метод random. Сохраняйте ту же форму массива, что и в недетерминированной версии, — и при одном и том же seed вы каждый раз получите идентичные результаты.