2017-01-15 11 views
-2

次のコードを実行しています。weighted_values関数は、指定された確率でランダム値のシーケンスを返します。インデックスエラー:インデックス3は、サイズ1の軸1の範囲外です。

def weighted_values(values, probabilities, size): 
    bins = np.add.accumulate(probabilities) 
    return np.array(values[np.digitize(random_sample(size), bins)]) 

def weak_softmax(a): 
    b=np.exp(a) 
    return b/(1+sum(b)) 


elements=np.array([1,2,3]) 
prob=np.array([0.2,0.5,0.3]) 


system_index=0; 
T=10;M=2; 

for t in np.arange(T): 

    prob=weak_softmax(np.random.uniform(0,1,M+1)); 

    system_index=weighted_values(np.arange(M+1),prob,1)[0] 

print(system_index) 

しかし、私はこのコードを実行すると、時々私は

Traceback (most recent call last): 
File "gradient_checking.py", line 75, in <module> 
    system_index=weighted_values(np.arange(M+1),prob,1)[0] 
File "gradient_checking.py", line 57, in weighted_values 
    return np.array(values[np.digitize(random_sample(size), bins)]) 
IndexError: index 3 is out of bounds for axis 1 with size 3 

は誰が何を示唆することができ、このエラーが出る:私は次は私のコードで、この答えからGenerating discrete random variables with weights

を、この機能を使用しています私は間違っていて、修正する方法は?

+1

完全なエラーとそれがスローされた行とともにコード全体を投稿できますか? 'random_sample(...)'とは何ですか? –

+0

@ Shiva:random_sampleは、以前の答えへのリンクで説明したように、明らかに0と1の間の一様乱数を生成します。 – pikachuchameleon

答えて

1

エラーがシェイプ(n,3)(軸1サイズ3)の配列を持っている、とあなたは問題の記述では3

In [9]: np.ones((5,3))[:,3] 
... 
IndexError: index 3 is out of bounds for axis 1 with size 3 

とインデックスにそれをしようということを私に語った:

values[np.digitize(random_sample(size), bins)] 

valuesの形状を確認することをお勧めします。それはnp.arange(M+1)のように見えます。Mは2です。それはサイズ3ですが、1dです。

np.digitize(random_sample(size), bins)も何ですか?

このようなエラーが発生した場合は、疑わしい配列の形状を確認し、インデックスの値の範囲を確認する必要があります。私たちはあなたのコードを読むだけで、あまり推測できません。

+0

このnp.ones((5,3))[:, 3]の行は5で、列は3です。なぜdoesnt [:、3]が最後の列を印刷しますか? –

関連する問題