Numpy random draw gives different results

Issue

I try to get 20 data points drawn from a random distribution. It’s straightforward but two methods below give different results, despite the seed is the same.

Method 1

np.random.seed(1)
x1 = np.random.uniform(low=-10, high=10, size=20)
y1 = np.random.uniform(low=20, high=80, size=20)

The result is:

x1 = [-1.65955991  4.40648987 -9.9977125  -3.95334855 -7.06488218 -8.1532281
 -6.27479577 -3.08878546 -2.06465052  0.77633468 -1.61610971  3.70439001
 -5.91095501  7.56234873 -9.45224814  3.4093502  -1.65390395  1.17379657
 -7.19226123 -6.03797022]

and

y1 = [68.04467412 78.09569454 38.80545069 61.53935694 72.58334914 73.67639981
 25.10265268 22.34328699 30.18982517 72.68855021 25.90081003 45.2664575
 77.47337181 51.9899171  61.51262684 38.93093786 61.19005566 70.07754031
 21.09729664 65.0086589 ]

Method 2

N = 20
np.random.seed(1)
points = [(np.random.uniform(-10,10), np.random.uniform(20,80)) for i in range(N)]

The result is:

[(-1.6595599059485195, 63.219469606529486), (-9.997712503653101, 38.13995435791038), (-7.064882183657739, 25.54031568612787), (-6.274795772446582, 40.73364362258286), (-2.0646505153866013, 52.32900404020142), (-1.6161097119341044, 61.11317002380557), (-5.910955005369651, 72.68704618345672), (-9.452248136041476, 60.22805061070413), (-1.6539039526574602, 53.5213897067451), (-7.192261228095324, 31.886089345092728), (6.014891373510732, 78.09569454316386), (-3.7315164368151432, 61.53935694015885), (7.527783045920767, 73.67639981023083), (-8.299115772604441, 22.343286993972942), (-6.6033916087086215, 72.68855020576478), (-8.033063323338999, 45.26645750030313), (9.157790603010039, 51.98991709838103), (3.837542279009467, 38.93093786036378), (3.7300185536316732, 70.07754031384238), (-9.634234453116164, 65.00865889669805)]

Could anyone help with explaining the difference?

Solution

The first method first generates 20 numbers from the first distribution, followed by 20 numbers from the second distribution. In the second method, you alternate the distribution from which numbers are being generated. These methods do not generate corresponding numbers in the same order, so you should not expect to get the same results. Each time you generate a random number, the internal state of the generator changes, and that change affects all subsequent invocations of the generator, regardless of whether it is applied to the same distribution. numpy.random methods all use the same global internal state.

As an aside, NumPy recommends the use of numpy.random.Generator methods instead of numpy.random or numpy.random.RandomState methods (see here).

Answered By – MathIsFun7225

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published