I wonder if it is possible to exactly reproduce the whole sequence of
randn() of MATLAB with NumPy. I coded my own routine with Python/Numpy, and it is giving me a little bit different results from the MATLAB code somebody else did, and I am having hard time finding out where it is coming from because of different random draws.
I have found the
numpy.random.seed value which produces the same number for the first draw, but from the second draw and on, it is completely different. I’m making multivariate normal draws for about 20,000 times so I don’t want to just save the matlab draws and read it in Python.
The user asked if it was possible to reproduce the output of randn() of Matlab, not rand. I have not been able to set the algorithm or seed to reproduce the exact number for randn(), but the solution below works for me.
In Matlab: Generate your normal distributed random numbers as follows:
rng(1); norminv(rand(1,5),0,1) ans = -0.2095 0.5838 -3.6849 -0.5177 -1.0504
In Python: Generate your normal distributed random numbers as follows:
import numpy as np from scipy.stats import norm np.random.seed(1) norm.ppf(np.random.rand(1,5)) array([[-0.2095, 0.5838, -3.6849, -0.5177,-1.0504]])
It is quite convenient to have functions, which can reproduce equal random numbers, when moving from Matlab to Python or vice versa.