http://blog.163.com/symphony_sol/blog/static/30279623200751841822500/
兩種不同的隨機數算法
seed是matlab4的,matlab5及以后用的是state
seed 現在也是有的,
實際上現在用的隨機數是偽隨機數,由一定的規則產生
比如z_{k+1}=f(z_{k}),z_{k}即為我們得到的隨機數,
比如之前得到的隨機數是0.5, 再用randn命令得到的隨機數是0.6
那么如果下次得到隨機數0.5,那么之后的隨機數還是0.6
seed是產生這個隨機數的種子,也就是初始值z_{0},seed不同,得到的隨機數列也不同,
取定了seed之后,隨機數列也就確定了,只不過這個數列非常大,看起來就象是隨機產生的,
舉例:
seed=x1
得到隨機數列 y1,....ym
seed=x2
得到隨機數列 z1,.....zn
關于state:指定隨機數的狀態,
我的理解是類似于指定了這個隨機數列數組的下標
比如:randn('state',100)
然后產生一個隨機數為 r0
然后中間再產生了若干隨機數
然后再鍵入命令randn('state',100)
這時再產生的隨機數還是r0
http://blog.sina.com.cn/s/blog_6c00b0e30100rmyy.html
(2)RANDN產生偽隨機數的語法: 發生器的狀態決定所產生數的序號。 S = RANDN('state') 是一個二元向量,包括標準發生器的狀態; RANDN('state',S):設置發生器的狀態為S(即標準狀態); RANDN('state',0):設置發生器的初始狀態; RANDN('state',J):J為整數,設置發生器到J階狀態;
(3)MATlAB 4.X應用一個單獨的種子來產生隨機數: RANDN('seed',0) and RANDN('seed',J)作用與RANDN('state',0)和RANDN('state',J)一樣,但使用Matlab 4.x隨機數發生器。 RANDN('seed'):返回MATlAB 4.X發生器的當前種子。 |
以上部分是轉自其他網友的分析。下面是我對這randn或rand的理解。
例如:randn('state',0);,表明選定了一個初狀態,再定義隨機數列x=randn(1,100),x的值會確定下來,不會每運行一次而產生不同的隨機數。
例如: "E:\other\matlab 2007a\work\function\rand_"
a1 =2 3 1
b1 = 4 1 3 2
c1 = 1 3 4 5 2
重新運行還是這個結果
do_exp_MNIST_SSH_BRE_ITQ中半監督hashingSSH 重新跑一次,除了Training time和Test Time還是這個結果,因為有rand('seed',0);
rand('seed',0)和randn('state',0): do_exp_MNIST_SSH_BRE_ITQ中CCA-ITQ加randn('state',0)重新跑一次,除了Training time和Test Time還是這個結果,rand('state',0)不行,因為ITQ函數中用的randn不是rand
20160120谷歌搜索:randperm seed,找一個連接https://www.mathworks.com/matlabcentral/newsreader/view_thread/171653,有如下語句:If we initialize rand with some seed (say
rand('seed',1)) then the result of randperm(n) is always same after the initialization.
經過如下語句測試,沒有任何問題:
rand('seed',1);
a = randperm(10);
i=2;
rand('seed',i);
b = randperm(20);
rand('seed',1);
c = randperm(10);
i=2;
rand('seed',i);
d = randperm(20);
sum(a==c)
sum(b==d)