マトリックス a の k 個の最大値の位置 (インデックス) がバイナリ インジケーター マトリックス b と同じ位置にあるかどうかを判断する必要があります。
import numpy as np
a = np.matrix([[.8,.2,.6,.4],[.9,.3,.8,.6],[.2,.6,.8,.4],[.3,.3,.1,.8]])
b = np.matrix([[1,0,0,1],[1,0,1,1],[1,1,1,0],[1,0,0,1]])
print "a:\n", a
print "b:\n", b
d = argsort(a)
d[:,2:] # Return whether these indices are in 'b'
戻り値:
a:
[[ 0.8 0.2 0.6 0.4]
[ 0.9 0.3 0.8 0.6]
[ 0.2 0.6 0.8 0.4]
[ 0.3 0.3 0.1 0.8]]
b:
[[1 0 0 1]
[1 0 1 1]
[1 1 1 0]
[1 0 0 1]]
matrix([[2, 0],
[2, 0],
[1, 2],
[1, 3]])
b
最後の結果から返されたインデックスを比較し、それらの位置にある場合はカウントを返したいと思います。この例では、最終的に望ましい結果は次のようになります。
1
2
2
1
つまり、 の最初の行でa
は、上位 2 つの値が の値の 1 つだけに対応しますb
。
これを効率的に行う方法はありますか?たぶん、ここでは argsort が間違ったアプローチです。ありがとう。