简体   繁体   English

计算 Python numpy 中两个二维 arrays 的不同非零值

[英]Count different non-zero values of two 2D arrays in Python numpy

I would like to find out how many values in 2D array array1 are different from values in array2 on same positions (x, y) and not equal 0 in array2 using Numpy.我想使用 Numpy 找出 2D 数组array1中有多少值与array2在相同位置 (x, y) 上的值不同,并且在array2中不等于0

array1 = numpy.array([[1, 2], [3, 0]])
array2 = numpy.array([[1, 2], [0, 3]])
print(numpy.count_nonzero(array1 != array2)) # 2

Example above prints 2 , because 0 and 3 are different.上面的示例打印2 ,因为 0 和 3 不同。 Is there any way not to count difference if value in array2 is 0 ?如果array2中的值为0 ,有没有办法不计算差异? Something like that (which is not working - ValueError: The truth value of an array with more then one element is ambiguous. Use a.any() or a.all() ):类似的东西(不起作用 - ValueError: The truth value of an array with more then one element is ambiguous. Use a.any() or a.all() ):

print(numpy.count_nonzero(array1 != array2 and array2 != 0)) # Should be 1.

You can achieve that by replacing and with multiplication:您可以通过替换and乘法来实现:

print(numpy.count_nonzero((array1 != array2) * (array2 != 0)))
a = np.array([[1, 2], [3, 0]])
b = np.array([[1, 2], [0, 3]])

Filter out b 's zero values过滤掉b的零值

np.nonzero returns indices, this uses multidimensional index arrays to filter out the zero values. np.nonzero返回索引,这使用多维索引 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

This uses boolean indexing to filter out the zero values.这使用boolean 索引来过滤掉零值。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM