2014-12-04 73 views
0

我有這樣的功能:python:random.random函數總是返回0?

def get_starting_centroids(centroids,size,num): 
    for i in range(0,num): 
     temp = [] 
     for j in range(0,size): 
      random.seed(time.clock()) 
      g = random.random() 
      g = g*.85 + .15 
      print "random: %i" %g 
      temp.append(g) 
     centroids.append(temp) 
    return centroids 

打印告訴我,它總是返回0。如果我在Python提示符測試random.random()我得到一個隨機值。我不明白是什麼原因造成這種差異

+6

你爲什麼每次都要重播「隨機」? – 2014-12-04 18:40:47

+1

此外,即使每次都有重新播種的原因,random.seed()(不帶參數)[使用當前系統時間](https://docs.python.org/2/library/random .html#random.seed)默認情況下。 – 2014-12-04 18:47:01

+2

是的,如果你在循環中調用'seed',你根本沒有得到隨機數。 – 2014-12-04 18:54:27

回答

7

要格式化您的隨機值整數

print "random: %i" %g 

地板值,低於1 總是,讓您時刻最終與0

打印浮點值:

print "random: %.5f" % g 

,你會看到有實際價值在那裏,只是0.15到1之間

你不應該種子,隨機數生成每一輪;如果您需要種子,只需在迴路外執行一次:

random.seed() # seeds to the current system time by default 
for j in range(0,size): 
    g = random.random() 
    g = g*.85 + .15 
    print "random: %.5f" % g 
    temp.append(g) 
+0

感謝大家提出這些問題。有時你會錯過簡單的東西。我認爲你是第一張海報,所以你明白了 – 2014-12-06 01:13:02

1

您的問題是格式化。

使用

print "random: %f" %g 

要格式化爲小數,這截斷克,這是一個浮動。但是,應該將g正確添加到temp數組中。