2011-05-31 20 views
1
N=100 

reliab=zeros((N,N)) 


for i in range(N):  

    for j in range(N): 
     if random() < 0.6: 
      reliab[i,j] = 1 
     else: 
      reliab[i,j] = 0 

正如我在這段代碼矩陣填充召回的次數數量龐大,這些for循環應以點產品來改變......但我不知道該怎麼做.. 。 任何人都願意幫助我?從循環來numpy的點實施

回答

4

我不知道我完全理解你的問題,但是下面一行應該做同樣的事情,你的代碼:

reliab = numpy.int32(numpy.random.rand(N,N) < 0.6) 
1
>>> import numpy as np 
>>> reliab = np.random.random((N,N)) 
>>> reliab = reliab < 0.6 
>>> reliab.dtype = np.int8 
>>> reliab 
array([[0, 0, 0, ..., 1, 0, 1], 
     [0, 1, 1, ..., 0, 1, 0], 
     [1, 1, 0, ..., 1, 0, 1], 
     ..., 
     [0, 1, 0, ..., 1, 1, 1], 
     [0, 0, 1, ..., 1, 1, 1], 
     [0, 1, 0, ..., 0, 0, 0]], dtype=int8) 
+0

尼斯。您應該在更改其類型之前縮放可靠性。 OP想要以0.6的概率分配1。 – 2011-05-31 21:23:13

+0

@AmaçHerdağdelen:np.random.random位於區間'[0,1]'上,所以不需要縮放。 (或者總結我的數組,我從10000中獲得了6009個,這對於60%來說是非常重要的)。 (是的,你打我的答案,他們是相似的,但我想我會寫完答案無論如何)。 – 2011-05-31 21:29:34

+0

對不起,我看到您的答案的早期版本沒有包含「<0.6」的比較。現在沒有錯。 – 2011-05-31 21:33:42