2016-06-19 9 views
1

私は3回の試行で正しい答えに基づいて得点を計算するスコアリング方法に取り組んでいます。各行について、最初の試行が正しければスコアは1であり、2回目の試行が正しければスコアは1/2であり、3回目の試行が正しければスコアは1/3である。numpy:行の重複値を0に設定する

合計スコアは、各行のスコアを行数で割った合計です。

スコアリングする必要がある入力は、nが任意の数であるshape(n、3)であるnumpy配列です。

print inputs[0:5] 
[[11111 22222 22222] 
[44444 55555 55555] 
[33333 33333 33333] 
[11111 11111 11111]] 

この作業を行うには、重複カウントを防止するために重複値を0に変更する必要があります。最初の試行= 2回目の試行では、2回目の試行は0に設定します。2回目の試行= 3回目の試行では、3回目の試行は0に設定されます。

上記numpyのアレイは次のように変更しなければならない:

[[11111 22222 0] 
[44444 55555 0] 
[33333 0 0] 
[11111 0 0]] 

numpyのアレイ0に指定された行に重複する値を変更するニシキヘビ方法は何ですか?基本的に私たちはそれぞれの行に沿って非ゼロの分化を探し、そう

input[:,1:] *=(np.diff(input,axis=1)!=0) 

以降2番目の要素を保持するかset to 0ためにそれを使用 -

答えて

3

あなたはnp.diffを使用することができます。

サンプル実行 -

In [19]: input 
Out[19]: 
array([[11111, 22222, 22222], 
     [44444, 55555, 55555], 
     [33333, 33333, 33333], 
     [11111, 11111, 11111]]) 

In [20]: input[:,1:] *=(np.diff(input,axis=1)!=0) 

In [21]: input 
Out[21]: 
array([[11111, 22222,  0], 
     [44444, 55555,  0], 
     [33333,  0,  0], 
     [11111,  0,  0]]) 
関連する問題