Я параллельно запускаю n экземпляров одного и того же кода и хочу, чтобы каждый экземпляр использовал независимые случайные числа.
Для этого перед тем, как я начну параллельные вычисления Я создаю список случайных состояний, например:
import numpy.random as rand
rand_states = [(rand.seed(rand.randint(2**32-1)),rand.get_state())[1] for j in range(n)]
Затем я передаю один элемент rand_states
каждому параллельному процессу, в котором я в основном выполняю
rand.set_state(rand_state)
data = rand.rand(10,10)
Чтобы сделать вещи воспроизводимыми, я запускаю np.random.seed (0) в самом начале всего.
Работает ли так, как я надеюсь? Это правильный способ достичь этого?
(Я не могу просто сохранить сами массивы данных заранее, потому что (i) во многих случаях генерируются случайные числа в параллельных процессах и (ii) возникает ненужная логическая связь между параллельным кодом и управляющим непараллельный код и (iii) на самом деле я запускаю M
срезов на N<M
процессорах, и данные для всех M срезов слишком велики для хранения)