2016-11-16 88 views
0

我試圖運行下面的代碼。對於那些瞭解它的人來說,這是Ehrenfest Urn模擬的嘗試。陣列/矩陣操作出錯

import numpy as np 
import random 

C=5 
L=2 
# Here I create a matrix to be filled with zeros and after with numbers I want 
b=np.zeros((L,C)) # line x column 

A=[] # here I creat 2 lists to put random integer numbers on it 
B=[] 

i=1 
while i<=10: # here I am filling list A (only) with 10 numbers 
    A.append(i) 
    i=i+1 

for j in range(2): 

    for i in range(5): #here I want to choose random numbers between 1 and 10, 

     Sort=random.randint(1,10) 

     if i==0: # since there is no number on B, the first step, the number goes to B 
      B.append(Sort) 
      A.remove(Sort) 
      print(len(A)) 

     if i>0: # now each list A and B have numbers on it, so I will choose one number and see in which list it is 
       if Sort in A: 
        B.append(Sort) 
        A.remove(Sort) 
       else: 
        A.append(Sort) 
        B.remove(Sort) 

      i=i+1 
      b[j,i]=len(A) # here I want to add the lenght of the list A in a matrix, but then I get the error. 
     j=j+1 

print(b) 

,但我得到了以下錯誤:

Traceback (most recent call last): 

    File "<ipython-input-26-4884a3da9648>", line 1, in <module> 
runfile('C:/Users/Public/Documents/Python Scripts/33.py', wdir='C:/Users/Public/Documents/Python Scripts') 

    File "C:\Program Files\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 866, in runfile 
execfile(filename, namespace) 

    File "C:\Program Files\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile 
exec(compile(f.read(), filename, 'exec'), namespace) 

    File "C:/Users/Public/Documents/Python Scripts/33.py", line 42, in <module> 
b[j,i]=len(A) # here I want to add the lenght of the list A in a matrix 

IndexError: index 5 is out of bounds for axis 1 with size 5 

我在做什麼錯的陣列? 與矩陣中的數字標識有什麼關係?

+0

一個明顯的問題是您的名單A []將有11個插槽,而不是10個(包括零);你對此有過解釋嗎? –

+0

是的,我確實檢查了=)但我不知道問題出在哪裏 –

+0

我相信Hpauji的答案應該可以工作 –

回答

1

該錯誤意味着b.shape[1](軸1)爲5;但i是5.記住索引爲0

開始在更廣闊的畫面:

while i<5: #here I want to choose random numbers between 1 and 10, 
    ... 
    i=i+1 
    b[j,i] ... 

在最後一次迭代i==4,你加一個,現在是5,並給出了錯誤。

通常在Python我們迭代與

for i in range(5): 
    b[j,i] ... 

range(5)產生[0,1,2,3,4]。您可能有充分的理由使用這個時間,但它受到相同的限制。

+0

哦,我不知道,謝謝!我改變了它在我的代碼,但同樣的錯誤再次出現 –

+0

哦,現在它工作了...我得到了與第一A.remove有關的另一個錯誤,但突然它的工作... –

+0

是否正常有不同的錯誤如果不更改代碼並運行幾次?我這樣說是因爲,我運行了代碼5次,其中2次我在這裏得到了同樣的錯誤,其他次2次我得到了A.remove和上次運行的錯誤... –