Мне нужно определить, находится ли позиция (индекс) из k наибольших значений в матрице a в том же положении, что и матрица двоичных индикаторов, b ,Python - Найти значения K max в каждой строке одной матрицы и сравнить с двоичной матрицей
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 значения соответствуют только одному из них в b
и т.д.
Любые идеи, как это сделать эффективно? Может быть, аргумент здесь неправильный подход. Спасибо.
Saullo, спасибо за ваш ответ, но работает ваш код, я получаю '[2,2,1,2]' в качестве выхода. Кроме того, я хотел бы обобщить на k> 2. Есть идеи? Благодаря! – zbinsd
@zbinsd Извините! Я обновил ответ ... здесь я забыл положить '[:, :: - 1]', чтобы отменить исходный результат 'argsort' ... –
Saullo, это становится очень близким. Как я могу получить, скажем, топ-3? В конце концов (для большей матрицы, 'a'), нужно вернуть топ-10. Заранее спасибо. – zbinsd