Each Answer to this Q is separated by one/two green lines.
I find Python (and its ecosystem) to be full of strange conventions and inconsistencies and this is another example:
Create an array of the given shape and populate it with random samples from a uniform distribution over [0, 1).
Return random floats in the half-open interval [0.0, 1.0). Results are from the “continuous uniform” distribution over the stated interval.
??? What exactly is the difference there?
Both functions generate samples from the uniform distribution on [0, 1). The only difference is in how the arguments are handled. With
numpy.random.rand, the length of each dimension of the output array is a separate argument. With
numpy.random.random_sample, the shape argument is a single tuple.
For example, to create an array of samples with shape (3, 5), you can write
sample = np.random.rand(3, 5)
sample = np.random.random_sample((3, 5))
(Really, that’s it.)
As of version 1.17, NumPy has a new random API. The recommended method for generating samples from the uniform distribution on [0, 1) is:
>>> rng = np.random.default_rng() # Create a default Generator. >>> rng.random(size=10) # Generate 10 samples. array([0.00416913, 0.31533329, 0.19057857, 0.48732511, 0.40638395, 0.32165646, 0.02597142, 0.19788567, 0.08142055, 0.15755424])
Generator class does not have the
random_sample() methods. There is a
uniform() method that allows you to specify the lower and upper bounds of the distribution. E.g.
>>> rng.uniform(1, 2, size=10) array([1.75573298, 1.79862591, 1.53700962, 1.29183769, 1.16439681, 1.64413869, 1.7675135 , 1.02121057, 1.37345967, 1.73589452])
The old functions in the
numpy.random namespace will continue to work, but they are considered “frozen”, with no ongoing development. If you are writing new code, and you don’t have to support pre-1.17 versions of numpy, it is recommended that you use the new random API.
I had the same question. This shows the outputs are identical. The difference is in input format (single arg for dimensions (tuple or list) vs a sequence of dimension args):
# np.random.random([2,3]) vs np.random.rand(2,3) print() np.random.seed(1) print(' .. np.random.random([2,3]):\n', np.random.random([2,3])) print() np.random.seed(1) print(' .. np.random.rand(2,3):\n', np.random.rand(2,3)) # output .. np.random.random([2,3]): [[4.17022005e-01 7.20324493e-01 1.14374817e-04] [3.02332573e-01 1.46755891e-01 9.23385948e-02]] .. np.random.rand(2,3): [[4.17022005e-01 7.20324493e-01 1.14374817e-04] [3.02332573e-01 1.46755891e-01 9.23385948e-02]]