我正在嘗試生成一個函式,該函式從均勻分布中生成亂數Number_Rand(),另一個生成給定種子的亂數Number_Rand_Seed()- 以便固定種子始終相同。但是,我呼叫了Number_Rand_Seed()里面的函式Number_Rand(),出于某種原因,種子也被用來在 中生成亂數Number_Rand(),所以它的輸出總是相同的。種子不應該是內部的區域變數Number_Rand_Seed()嗎?每次我呼叫 np.random 函式時,種子不應該“更新”嗎(參見,例如,這個答案)?那么我該怎么做才能“更新”里面的種子Number_Rand()并忽略 的種子Number_Rand_Seed()?
下面是一個例子:
def Number_Rand_Seed():
np.random.seed(300121)
a = np.random.uniform(0, 10)
return a
def Number_Rand():
a = Number_Rand_Seed()
b = np.random.uniform(0, 10)
return a, b
for i in range(3):
print(Number_Rand())
輸出是
(9.354120260352017, 2.552916103146633)
(9.354120260352017, 2.552916103146633)
(9.354120260352017, 2.552916103146633)
但我想要類似的東西
(9.354120260352017, 8.823425849537022)
(9.354120260352017, 5.950595370176398)
(9.354120260352017, 9.992406389398592)
uj5u.com熱心網友回復:
如果你想在設定后重置種子,你可以使用該功能:
numpy.random.seed()
它將種子更改為隨機值,如下所示:
def Number_Rand_Seed():
np.random.seed(300121)
a = np.random.uniform(0, 10)
return a
def Number_Rand():
a = Number_Rand_Seed()
np.random.seed()
b = np.random.uniform(0, 10)
return a, b
for i in range(3):
print(Number_Rand())
uj5u.com熱心網友回復:
在最近的 numpy 版本中,您可以使用np.random.default_rng.
在下面我使用它 for a,同時保留默認值 for b:
In [35]: def Number_Rand_Seed():
...: rng = np.random.default_rng(300121)
...: a = rng.uniform(0, 10)
...: return a
...:
...: def Number_Rand():
...: a = Number_Rand_Seed()
...: b = np.random.uniform(0, 10)
...: return a, b
...:
...: for i in range(3):
...: print(Number_Rand())
...:
(9.98668624527619, 2.7036401003521817)
(9.98668624527619, 9.154952983315784)
(9.98668624527619, 1.413705001678095)
In [36]: Number_Rand()
Out[36]: (9.98668624527619, 5.274283695955279)
或者rng在函式外定義一個“默認值” 。該rng中Number_Rand_Seed是區域的,不與干預rng外面定義。當然,如果我使用不同的名稱,代碼對人類來說會更清晰。
...: rng = np.random.default_rng()
...: def Number_Rand():
...: a = Number_Rand_Seed()
...: b = rng.uniform(0, 10)
...: return a, b
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/341067.html
