我有兩個陣列,如下:計數匹配值
b = array([[1, 0, 1],
[0, 0, 1]])
c = array([[ 0.5 , 0. ],
[ 0.34, 1. ],
[ 0. , 1. ]])
如何根據相同的索引值和所述的元件值來算兩個陣列的匹配值數組應該不爲零。這裏的匹配值是基於元素的索引而不是確切的值。
例如,在上面的矩陣中,我的兩個數組是b的行和c的相應列。如果您看到,c中的0.5 c [0,0]與b的1(b [0,0])相匹配。該值不匹配,但由於它們是非零值並且存在於相應數組中的相同位置(均存在於第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