2016-11-10 70 views
0

我用來生成隨機系統的人,並且因爲它的功能,我想在Numpy中選擇隨機模塊。但是當我想實現它時,我意識到Numpy不會真正生成一個psedu-random數字。隨機在numpy中沒有生成隨機數

import numpy as np 
    for i in range(10000): 
     n[i] = np.random.randint(0,1) 

正如我所說,所有的細胞在n個具有零值:簡單地說,下面的代碼的結果每次都是0。即使當我在每次迭代之間添加暫停時,我仍然有相同的結果。

import time 
    import numpy as np 
    for i in range(10000): 
     n[i] = np.random.randint(0,1) 
     time.sleep(2) 

這不是我在隨機模塊中使用構建的情況。 由於這個問題可能真的影響到我的結果的完整性,所以我非常感謝任何關於如何解決這個問題的命令,或者爲什麼會發生這種情況。

PS:這是不是這樣的,當我在空閒導入與NumPy和只是簡單地打印

np.random.randint(0,1) 

連連。在這種情況下,結果看起來像隨機。

回答

4

自變量numpy.random.randint(low, high)是一個獨佔範圍,如range(low, high)。您希望numpy.random.randint(0, 2)具有生成0或1的相等機會。

這與標準庫的random.randint()不同,後者使用包含範圍。包容性範圍被廣泛認爲是設計錯誤。這兩個功能的命名大多是巧合的; numpy.random.randint()NumericRandomArray模塊下降,該模塊早於標準random模塊,並且被設計爲與RandomArray向後兼容以簡化從Numericnumpy的轉換。

1

randintab-1之間產生的數字,所以如果你想隨機二進制數使用下列任一:

np.random.randint(0,2) 
np.random.randint(2) 

另外,還可以使用產生在同一時間數組:

n = np.random.randint(2, size=10000) 

不知道爲什麼IDLE生成的行爲與我擔心的文檔不同。

0

「randint」只生成指定範圍內的整數,在您的代碼中只能使用數字1。 代替使用:

randint(0,1) 

使用的東西具有較高值的​​逗號之後,如:

randint(0,2) 

要創建的隨機數是1或2。

另外,如果使用內置的隨機函數,則可以生成介於0.0和1.0之間的隨機浮點值:

import random 
randnum = random.random() 
print(randnum) 

這給出了一個令人聯想到諸如「0」的值的輸出。1798164301328583「,並且可以使用簡單的python數學將它們變成所需的值。