Сделать сгенерированные числа numpy.random одинаковыми для разных функций - PullRequest
0 голосов
/ 07 октября 2018

Предположим, у вас есть две функции, подобные этим:

import numpy as np


def function_1(seed):

    res = []
    np.random.seed(seed)
    for i in range(10):
        res.append(np.random.rand())

    return res


def function_2(seed):

    res = []
    np.random.seed(seed)
    for i in range(10):
        a = np.random.rand()  # necessary!
        res.append(np.random.rand())

    return res

Они в основном одинаковы, просто в function_2 вы должны генерировать дополнительное случайное число для каждого запуска цикла for.

Теперь

x = function_1(1)
y = function_2(1)
x == y
>>> False

Однако необходимо убедиться, что возвращенный res идентичен для обеих функций.Есть ли лучший способ, чем изменить function_1 на следующее?

def function_3(seed):

    res = []
    np.random.seed(seed)
    for i in range(10):
        np.random.rand()
        res.append(np.random.rand())

    return res

Тогда

z = function_3(1)
y == z
>>> True

1 Ответ

0 голосов
/ 07 октября 2018

Используйте выделенное RandomState для последовательности, которая должна быть идентичной:

def function_2(seed):

    res = []
    random1 = np.random.RandomState(seed)
    for i in range(10):
        a = np.random.rand() # uses global state, no explicit seed
        res.append(random1.rand())

    return res

Кстати, вам действительно следует попробовать res = random1.rand(10), чтобы сделать это без цикла.Это будет быстрее.

...