Counting match between two arrays at same index position and having non zero values
有两个阵列为下面的:
1 2 3 4 5 6 | b = array([[1, 0, 1], [0, 0, 1]]) c = array([[ 0.5 , 0. ], [ 0.34, 1. ], [ 0. , 1. ]]) |
如何count值匹配两阵列基于相同的指标值和数组元素的值应该是非零。这里的价值是基于匹配的元素和指标不是精确值。
橡树。在以上两个数组的矩阵,是我行(B和C柱的对比。如果你看到,0.5 C [龙]的配合与C(1)B(0,0)B的值不匹配,但由于他们是非零的值和指尖的位置在相同的在各自的阵列(两个手指来张指数),它应该是counted。如果值为零或冰的阵列位置,那么它不会被counted。
以上的矩阵,应该得到2支安打,因为第一行的第一列(B和C)有共同的非零元素的价值:以只读一B或C [龙]的[龙]。在第二行similarly,B有一部和第二部的匹配:B柱C或C [ 1,2 ] [ 2 ]
看下面的代码,但它提供的总和为3而不是2。这是因为在计数的案例也都是有价值的位置为0,它配合了。在所有非零的值,从而在相同的位置在两个数组。
1 2 3 | sum=0 for x in range(b.shape[0]): sum+=np.sum((b[x,:]==0) == (c[:,x]==0)) |
我在想:这是我第一次把大学的两个非零指数的数组,然后compare。但它是个错误。
1 2 3 4 5 6 | 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() |
您的关键问题是检查"非零"值是否相等:您需要和这里,而不是==:
1 | sum += np.sum((b[x,:]!=0) & (c[:,x]!=0)) |
这将产生所需的结果2。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import numpy as np b = np.array([[1, 0, 1], [0, 0, 1]]) c = np.array([[ 0.5 , 0. ], [ 0.34, 1. ], [ 0. , 1. ]]) sum=0 for x in range(b.shape[0]): print"row/col", x print b[x,:]!=0 print c[:,x]!=0 sum+=np.sum((b[x,:]!=0) & (c[:,x]!=0)) print sum |
号