java.lang.Math.Random()與java.util.Random生成隨機數的區別
一個是方法一個是對象之類的廢話就不說了。關鍵在與兩個生成隨機數的不同特征。因為在做圖像特征提取,對整個像素空間的逐個提取、識別顯然不太聰明,于是乎想起概率論上的一堆東東。
取得一個可以反應整個向量空間的隨機數集合,不失為明智的選擇。
《Think in Java》里面經常用那個對象弄,自然我首先想到了這個。同學則喜歡Math.Random,他認為生成的是一個在區間均勻分布的符合要求的隨機數。以前從來沒想過“隨機”這個問題,到底是一個任意的數(各個概率一樣,就像古典概型里面,硬幣的正反一樣),還是一個在空間有均勻分布特征的呢?
在網上搜羅了一大堆東西,發現說什么的都有,越來越迷糊。最后想起該看看權威的JDK API說明乎:
random(注:java.lang.Math)
public static double random()
返回帶正號的 double 值,該值大于等于 0.0 且小于 1.0。返回值是一個偽隨機選擇的數,在該范圍內(近似)均勻分布。
第一次調用該方法時,它將創建一個新的偽隨機數生成器,與以下表達式完全相同

new java.util.Random
之后,新的偽隨機數生成器可用于此方法的所有調用,但不能用于其他地方。
此方法是完全同步的,可允許多個線程使用而不出現錯誤。但是,如果許多線程需要以極高的速率生成偽隨機數,那么這可能會減少每個線程對擁有自己偽隨機數生成器的爭用。


返回:
大于等于 0.0 且小于 1.0 的偽隨機 double 值。
下面是java.util里面的
































看看下面的就更加顯而易見啦












于是我的結論如下:
1:java.lang.Math.Random()這個靜態方法得到的是一個空間中有均勻分布特征的隨機數。
2:java.util.Random,通過這個對象得到的則是“幾何分布”
3:我的圖像特征應該選擇第一個方法比較適當。
問題:我的似乎應該說是一個抽樣問題更為恰當。呼呼,先寫到這里
啦啦啦,請高人指教。
posted on 2008-05-01 17:15 Jarod.cn.LuLuLife 閱讀(26711) 評論(3) 編輯 收藏