鍍金池/ 問答/數(shù)據(jù)分析&挖掘  Python/ 為什么rand.randn一直返回一樣的結(jié)果?

為什么rand.randn一直返回一樣的結(jié)果?

定義了一個函數(shù),代碼如下:

def make_data(N, f=0.3, rseed=1): 
    rand = np.random.RandomState(rseed) 
    x = rand.randn(N)
    return x 

調(diào)用的時候發(fā)現(xiàn)這個函數(shù)一直返回同樣的結(jié)果,對這個有一點不理解。

x = make_data(10)
y = make_data(10)
x == y

返回值為

array([ True,  True,  True,  True,  True, True,  True,  True,  True,  True])

自己看了一下,問題應該出在rand=np.random.RandomState(rseed),因為如果使用下面代碼:

x = np.random.RandomState(5).randn(5)
y = np.random.RandomState(5).randn(5)
x == y

結(jié)果還是一樣,但是奇怪的是,如果用下面這個代碼:

rand = np.random.RandomState(5)
x = rand.randn(5)
y = rand.randn(5)
x == y

xy的返回值不一樣。
請問這是怎么回事?

回答
編輯回答
別硬撐

numpy 的 random 機制和 Python 標準庫的 random 模塊機制是一樣的,當我們設置相同的 seed,每次生成的隨機數(shù)相同。
如果不設置 seed,則每次會生成不同的隨機數(shù)。
這里引用 stackoverflow 上的最高票解答

>>> numpy.random.seed(0) ; numpy.random.rand(4)
array([ 0.55,  0.72,  0.6 ,  0.54])
>>> numpy.random.seed(0) ; numpy.random.rand(4)
array([ 0.55,  0.72,  0.6 ,  0.54])
2018年6月29日 05:42