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 вы каждый раз получите идентичные результаты.