Случайное значение из двух семян - PullRequest
1 голос
/ 22 сентября 2019

Имеют двумерную сетку и нуждаются в воспроизводимом случайном значении для каждой целочисленной координаты в этой сетке.Это значение должно быть как можно более уникальным.В сетке, скажем, 1000 x 1000, это не должно происходить дважды.

Чтобы выразить это более математически: мне нужна функция f (x, y), которая дает уникальное число независимо от того, какой xи у тех пор, пока каждый из них находится в диапазоне [0, 1000]

f (x, y) должен быть воспроизводимым и не иметь побочных эффектов.

Возможно, есть некоторыеТривиальное решение, но все, что приходит мне в голову, например, умножение x и y, добавление соли и т. д., ни к чему не приводит, потому что полученное число может легко появиться несколько раз.Одно из рабочих решений, которое я получил, - это использовать рандомизатор и просто вычислять ВСЕ значения в сетке, но это слишком сложно для вычислений (делать каждый раз, когда требуется значение) или требует слишком много памяти в моем случае (я хочу избежать предварительноговычисление всех значений).

Есть предложения?Огромное спасибо заранее.

1 Ответ

1 голос
/ 22 сентября 2019

Я бы использовал объединенную нулями конкатенацию ваших x и y в качестве начального числа для встроенного генератора случайных чисел.На самом деле я использую что-то подобное в некоторых моих текущих экспериментах.

Т.е. x = 13, y = 42 станет int('0013' + '0042') = 130042 для использования в качестве случайного начального числа.Затем вы можете использовать генератор случайных чисел по вашему выбору, чтобы получить требуемый тип (float, int и т. Д.) И диапазон значений:

Пример на Python 3.6 +:

import numpy as np
from itertools import product

X = np.zeros((1000, 1000))
for x, y in product(range(1000), range(1000)):
    np.random.seed(int(f'{x:04}{y:04}'))
    X[x, y] = np.random.random()

Каждыйзначение в сетке генерируется случайным образом, но воспроизводимо независимо.

...