Python, NumPy и R используют один и тот же алгоритм (Mersenne Twister) для генерации случайных числовых последовательностей. Таким образом, теоретически говоря, установка одного и того же семени должна приводить к одинаковым последовательностям случайных чисел во всех 3. Это не так. Я думаю, что в трех реализациях используются разные параметры, вызывающие это поведение.
R >set.seed(1) >runif(5) [1] 0.2655087 0.3721239 0.5728534 0.9082078 0.2016819
Python In [3]: random.seed(1) In [4]: [random.random() for x in range(5)] Out[4]: [0.13436424411240122, 0.8474337369372327, 0.763774618976614, 0.2550690257394217, 0.49543508709194095]
NumPy In [23]: import numpy as np In [24]: np.random.seed(1) In [25]: np.random.rand(5) Out[25]: array([ 4.17022005e-01, 7.20324493e-01, 1.14374817e-04, 3.02332573e-01, 1.46755891e-01])
Есть ли какой-то способ, в котором реализация NumPy и Python могла бы производить такую же последовательность случайных чисел? Конечно, как замечают некоторые комментарии и ответы, можно использовать rpy. То, что я специально ищу, - это точно настроить параметры в соответствующих вызовах в Python и NumPy, чтобы получить последовательность.
Контекст: проблема связана с предложением курса EDX, в котором используется R. На одном из форумов было задано вопрос о том, можно ли использовать Python, и персонал ответил, что некоторые задания потребуют установки определенных семян и отправки ответов.
Связанный:
- Сравнение кода Matlab и Numpy, использующего генерацию случайных чисел. Похоже, что базовая реализация NumPy и Matlab аналогична.
- python vs octave random generator: этот вопрос действительно близок к намеченному ответу. Требуется некоторая оболочка вокруг генератора состояний по умолчанию.