计算Python numpy中两个2D数组的不同非零值

时间:2019-10-17 21:56:30

标签: python arrays numpy

我想找出2D数组array1中有多少值与array2中相同位置(x,y)上的值不同,并且在{{1 }}使用Numpy。

0

上面的示例打印array2,因为0和3不同。如果array1 = numpy.array([[1, 2], [3, 0]]) array2 = numpy.array([[1, 2], [0, 3]]) print(numpy.count_nonzero(array1 != array2)) # 2 中的值为2,有什么方法可以不计算差异?诸如此类(不起作用-array2):

0

2 个答案:

答案 0 :(得分:0)

您可以通过用乘法替换and来实现:

print(numpy.count_nonzero((array1 != array2) * (array2 != 0)))

答案 1 :(得分:0)

a = np.array([[1, 2], [3, 0]])
b = np.array([[1, 2], [0, 3]])

过滤掉b的零值

np.nonzero返回索引,它使用multidimensional index arrays过滤出零值。

In [144]: b.nonzero()
Out[144]: (array([0, 0, 1], dtype=int64), array([0, 1, 1], dtype=int64))

In [145]: a[b.nonzero()]
Out[145]: array([1, 2, 0])

In [146]: b[b.nonzero()]
Out[146]: array([1, 2, 3])

In [147]: c = a[b.nonzero()] != b[b.nonzero()]

In [148]: c.sum()
Out[148]: 1

这使用boolean indexing过滤掉零值。

In [149]: b != 0
Out[149]: 
array([[ True,  True],
       [False,  True]], dtype=bool)

In [150]: a[b != 0]
Out[150]: array([1, 2, 0])

In [151]: b[b != 0]
Out[151]: array([1, 2, 3])

In [152]: c = a[b != 0] != b[b != 0]

In [153]: c.sum()
Out[153]: 1