<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在科學技術和機器學習等其他演演算法相關任務中,我們經常需要用到亂數,為了把握亂數的生成特性,從亂數的隨機無序中獲得確定和秩序。我們可以利用亂數種子(random seed)來實現這一目標,亂數種子,可以使得引入了亂數的整個程式,在多次執行中得到確定的,一致的結果。
很多博文談到亂數種子,只是簡單論及,利用亂數種子,可以每次生成相同的亂數。想真正用好掌握它,對此很容易產生疑惑,生成相同的亂數數怎麼個相同法?亂數種子又作何用處?
下面我們從範例中揭開亂數種子的神祕面紗:
import random # print(help(random)) def test_random_seed_in_std_lib(seed=0, cnt=3): random.seed(seed) print("test seed: ", seed) for _ in range(cnt): print(random.random()) print(random.randint(0,100)) print(random.uniform(1, 10)) print('n') test_random_seed_in_std_lib() test seed: 0 0.8444218515250481 97 9.01219528753418 0.04048437818077755 65 5.373349269065314 0.9182343317851318 38 9.710199954281542 test_random_seed_in_std_lib() test seed: 0 0.8444218515250481 97 9.01219528753418 0.04048437818077755 65 5.373349269065314 0.9182343317851318 38 9.710199954281542 test_random_seed_in_std_lib(99) test seed: 99 0.40397807494366633 25 6.39495190686897 0.23026272839629136 17 7.8388969285727015 0.2511510083752201 49 5.777313434770537
通過兩次執行以上程式,我們得到相同的結果,這說明了以下幾點:
以上幾點囊括了亂數種子的基本特性,下面我們來對numpy中的亂數種子作進一步的拓展研究。
import numpy as np def test_numpy_random_seed(seed=0, cnt=3): np.random.seed(seed) print("test numpy seed: ", seed) for _ in range(cnt): print(np.random.random()) print(np.random.randn(1, 5)) print(np.random.uniform(1, 10, 5)) print('n')
多次執行以上的test_numpy_random_seed函數,你可以觀察到與使用random模組時相似的情形,進一步驗證了我們總結的關於亂數種子的特性。
此外,我們可以對多維亂陣列做一些有益的探索:
def test_mult_shape(seed=0): np.random.seed(seed) print(np.random.randn(1, 3)) print(np.random.randn(1, 2)) np.random.seed(seed) print(np.random.randn(2, 5)) test_mult_shape() [[1.76405235 0.40015721 0.97873798]] [[2.2408932 1.86755799]] [[ 1.76405235 0.40015721 0.97873798 2.2408932 1.86755799] [-0.97727788 0.95008842 -0.15135721 -0.10321885 0.4105985 ]]
執行test_mult_shape函數,我們發現,設定相同的亂陣列,兩次執行兩個一行的多維正態分佈的結果,與一次執行兩行的多維正態分佈的結果的第一行完全相同。
這個結果,說明了對相同型別的亂數分佈,形狀特徵不會影響分佈的生成秩序,程式中,np.random.randn(1, 2),這一行不像是第二次執行多維正態分佈的亂陣列,它"幾乎"是字尾於它的前一行一次性生成的。
至此,我們對亂數生成順序有了初步印象,但是這裡的順序,其實比我們的樸素觀察更復雜,我們來進一步考察這一點。
def test_numpy_random_seed_order(seed=0): np.random.seed(seed) print(np.random.random()) # print(np.random.randint(1, 10)) print(np.random.randn(1, 5)) np.random.seed(seed) print(np.random.randn(2, 5)) test_numpy_random_seed_order() 0.5488135039273248 [[ 0.74159174 1.55291372 -2.2683282 1.33354538 -0.84272405]] [[ 1.76405235 0.40015721 0.97873798 2.2408932 1.86755799] [-0.97727788 0.95008842 -0.15135721 -0.10321885 0.4105985 ]]
執行以上程式,我們看到,設定了相同的亂數種子,np.random.randn(1, 5)看起來是第一次執行多維正態分佈陣列,實際上並不是,np.random.randn(2, 5)才是真正的第一次執行多維正態分佈亂陣列。
這說明,前面的np.random.random()對np.random.randn產生了干擾,使得這次正態分佈的亂陣列中的任何一個數,都不在np.random.randn(2, 5)中,這樣它顯示了一種不可把握的隨機性。
我們可以把這一點考察得更加深入一點:
def test_numpy_random_seed_order_further(seed=0, randint_high=10): np.random.seed(seed) print(np.random.randint(1, randint_high)) print(np.random.randn(1, 5)) np.random.seed(seed) print(np.random.randn(2, 5)) test_numpy_random_seed_order_further() 6 [[ 0.11849646 0.11396779 0.37025538 1.04053075 -1.51698273]] [[ 1.76405235 0.40015721 0.97873798 2.2408932 1.86755799] [-0.97727788 0.95008842 -0.15135721 -0.10321885 0.4105985 ]] test_numpy_random_seed_order_further(randint_high=5) 1 [[ 1.12279492 0.30280522 0.07085926 0.07304142 -1.42232584]] [[ 1.76405235 0.40015721 0.97873798 2.2408932 1.86755799] [-0.97727788 0.95008842 -0.15135721 -0.10321885 0.4105985 ]]
緊接上面對亂數干擾項對考察,我們看到,這次我們改變了干擾項亂數生成器,np.random.randn(1, 5)的生成結果不同於test_numpy_random_seed_order中同一行的執行結果。
另外,兩次設定不同的randint的右邊界,np.random.randn(1, 5)生成的結果也全然不同,這說明了np.random.randint設定不同的引數,即是全然不同的亂數發生器。這一點,也不難在其他型別的亂數分佈中得到驗證。
到此這篇關於Python亂數種子(random seed)的使用的文章就介紹到這了,更多相關Python亂數種子內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45