Is it possible to reproduce randn() of MATLAB with NumPy?

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.

Answer

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.

Leave a Reply

Your email address will not be published. Required fields are marked *