关于python:计算相同索引位置的两个数组之间的匹配,并且具有非零值

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