2016-11-16 16 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 []には10個ではなく11個のスロットがあります。あなたはそれを説明しましたか? –

+0

はい私はそれを確認しました=)しかし、どこに問題があるのか​​分かりません –

+0

Hpaujiの答えはうまくいくと思います –

答えて

1

エラーは、b.shape[1](軸1)が5であることを意味します。しかしiは5.インデックスを覚えているより広範な絵で0

開始時刻:最後の繰り返しi==4

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

、あなたは1を追加し、今では5である、とエラーになります。

は、一般的にPythonで、私たちは

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

range(5)[0,1,2,3,4]を生成して繰り返します。 whileを代わりに使用するのは良い理由があるかもしれませんが、同じ境界の対象です。

+0

ああ、感謝していませんでした!私はコード内で変更しましたが、同じエラーが再び表示されます –

+0

ああ、何とかうまくいきました...最初のA.removeに関連する別のエラーが発生しましたが、suddlentlyそれは働いていました... –

+0

異なるエラーコードを変更せずに数回実行するとしたら?私はこのコードを5回実行したので、2回目は同じエラーが発生し、A.removeでエラーが発生していて、最後に動作したためです。 –