Я жду, пока другой разработчик завершит работу над кодом, который вернет массив np формы (100,2000) со значениями -1, 0 или 1.
В то же время я хочу случайным образом создать массив с такими же характеристиками, чтобы я мог получить преимущество в своей разработке и тестировании. Дело в том, что я хочу, чтобы этот случайно созданный массив был одинаковым каждый раз, чтобы я не проверял массив, который постоянно меняет свое значение при каждом повторном запуске моего процесса.
Я могу создать свой массив таким образом, но есть ли способ создать его так, чтобы он каждый раз был одинаковым. Я могу мариновать объект и раскрывать его, но не знаю, есть ли другой способ.
r = np.random.randint(3, size=(100, 2000)) - 1
Ответ 1
Просто запустите генератор случайных чисел с фиксированным значением, например
numpy.random.seed(42)
Таким образом, вы всегда будете получать одну и ту же последовательность случайных чисел.
Ответ 2
Создайте свой собственный экземпляр numpy.random.RandomState()
с выбранным вами семенем. Не используйте numpy.random.seed()
, кроме как для работы с негибкими библиотеками, которые не позволяют вам передавать ваш собственный экземпляр RandomState
.
[~]
|1> from numpy.random import RandomState
[~]
|2> prng = RandomState(1234567890)
[~]
|3> prng.randint(-1, 2, size=10)
array([ 1, 1, -1, 0, 0, -1, 1, 0, -1, -1])
[~]
|4> prng2 = RandomState(1234567890)
[~]
|5> prng2.randint(-1, 2, size=10)
array([ 1, 1, -1, 0, 0, -1, 1, 0, -1, -1])
Ответ 3
Если вы используете другие функции, полагающиеся на случайное состояние, вы не можете просто установить и общее семя, но вместо этого должны создать функцию для генерации вашего случайного списка чисел и установить семя в качестве параметра функции. Это не будет мешать другим случайным генераторам кода:
# Random states
def get_states(random_state, low, high, size):
rs = np.random.RandomState(random_state)
states = rs.randint(low=low, high=high, size=size)
return states
# Call function
states = get_states(random_state=42, low=2, high=28347, size=25)
Ответ 4
Важно понять, что является семенем генератора случайных чисел и когда/как он установлен в вашем коде (см., Например, здесь для хорошего объяснения математического значения семени).
Для этого вам нужно установить начальное значение, выполнив:
random_state = np.random.RandomState(seed=your_favorite_seed_value)
Тогда важно генерировать случайные числа из random_state, а не из np.random. Т.е. вы должны сделать:
random_state.randint(...)
вместо
np.random.randint(...)
который создаст новый экземпляр RandomState() и в основном использует внутренние часы вашего компьютера для установки начального числа.
Ответ 5
Я просто хочу уточнить кое-что в отношении ответа @Robert Kern на тот случай, если неясно. Даже если вы используете RandomState
, вам придется инициализировать его каждый раз, когда вы вызываете случайный случайный метод, как в примере с Робертом, иначе вы получите следующие результаты.
Python 3.6.9 |Anaconda, Inc.| (default, Jul 30 2019, 19:07:31)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> prng = np.random.RandomState(2019)
>>> prng.randint(-1, 2, size=10)
array([-1, 1, 0, -1, 1, 1, -1, 0, -1, 1])
>>> prng.randint(-1, 2, size=10)
array([-1, -1, -1, 0, -1, -1, 1, 0, -1, -1])
>>> prng.randint(-1, 2, size=10)
array([ 0, -1, -1, 0, 1, 1, -1, 1, -1, 1])
>>> prng.randint(-1, 2, size=10)
array([ 1, 1, 0, 0, 0, -1, 1, 1, 0, -1])