У меня есть два массива, как показано ниже:Подсчет матч между двумя массивами в той же позиции индекса и имеющего, не нулевые значения
b = array([[1, 0, 1],
[0, 0, 1]])
c = array([[ 0.5 , 0. ],
[ 0.34, 1. ],
[ 0. , 1. ]])
Как подсчитать соответствие значений двух массивов на основе той же значения индекса и значение элемента массив должен быть равен нулю. Здесь значение соответствия основано на индексе элемента, а не на точном значении.
Для примера. в приведенных выше матрицах мои две массивы являются строками b и соответствующим столбцом c. Если вы видите, 0,5 c [0,0] в c соответствует 1 (b [0,0]) b. Значение не совпадает, но поскольку они являются ненулевыми значениями и присутствуют в одной и той же позиции в соответствующих массивах (оба присутствуют в 0-м индексе), их следует учитывать. Если значение равно нулю в любой позиции массива, то оно не будет считаться.
Для вышеуказанных матриц я должен получить 2 обращения, потому что первая строка b и первый столбец c имеет общие ненулевые элементы только при одном значении: b [0,0] или c [0,0]. Аналогично, вторая строка b имеет один совпадение со вторым столбцом c: b [1,2] или c [2,1]
Я пробовал следующий код, но он дает сумму как 3 вместо 2. Потому что он также учитывает случай, когда обе позиции имеют значение 0, и это тоже соответствует. Я хочу, чтобы ненулевое значение находилось в одной позиции в двух массивах.
sum=0
for x in range(b.shape[0]):
sum+=np.sum((b[x,:]==0) == (c[:,x]==0))
Я тогда попробовал это: сначала будут получать ненулевые индексы обоих массивов, а затем сравнить. Но это дает ошибку.
sum=0
for x in range(b.shape[0]):
sum+= np.sum((np.nonzero(b[x,:]!=0)) == (np.nonzero(c[:,x]!=0)))
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Почему вы удалили предыдущую версию этого вопроса, а не просто обновили его соответствующим образом? – Prune
обновил вопрос. Я удалил, потому что я не был уверен, что кто-то положит его на закрытие, получит видимость или нет. – Baktaawar