import numpy as npnp.random.seed(2) # 生成隨機種子2 一次使用機會 作用在下一個隨機數生成的時候
a = np.random.random() # 使用隨機種子2
b = np.random.random() # 因為隨機種子使用完了 ! 這里使用默認按系統根據時間作為seed參數的隨機種子
print(a) # 隨機種子2的隨機數
print(b) # 根據系統時間為參數生成的隨機數
第一次給python file命名的時候用了random.py。發現會報錯,因為numpy里面的random模塊和file名重了,所以報錯,后面改為seed則可以正常使用,但是生成的隨機數不同。
由于您的
random.py
腳本中也包含了嘗試從NumPy庫中導入random
模塊的代碼,這就造成了一個循環導入的問題(circular import),因為random.py
在嘗試導入NumPy的random
模塊時,又嘗試從它自身(而不是NumPy庫)中導入np.random
,這就導致了AttributeError
。要解決這個問題,您需要將您的Python腳本重命名為一個不與NumPy庫中任何模塊名稱相同的名稱。例如,您可以將
random.py
重命名為my_random_script.py
或其他任何不與NumPy庫沖突的名稱。
在NumPy中,當你使用np.random.seed(2)
設置隨機種子后,每次調用np.random.random()
或其他基于隨機數的函數(如np.random.randn()
,?np.random.uniform()
等)時,都會生成一個基于該種子值的隨機數。然而,由于這些隨機數生成器是偽隨機數生成器,它們會按照一種確定的算法來產生看似隨機的序列。
在你給出的例子中,a
和b
都是基于相同的種子值2生成的隨機數,但由于它們是在不同的時間點(即不同的函數調用)生成的,所以它們會是不同的數。這是偽隨機數生成器的一個關鍵特性:即使使用相同的種子,每次調用隨機數生成函數時,你都會得到一個不同的隨機數(在序列中的下一個數)。
簡而言之,a
和b
不一樣是因為它們是基于相同種子值的偽隨機數生成序列中的不同數。
?
import numpy as np
np.random.seed(2)
a= np.random.random()#相同seed(2)種子
np.random.seed(2)
b= np.random.random()#相同seed(2)種子
print(a)
print(b)
此時生成相同的隨機數。