确定 2 个 numpy 数组不同的索引

Determining the indicies where 2 numpy arrays differ

我有 2 个长的 numpy 数组,都有 508 个元素。我想获得它们不同之处的索引。我在这里看到的大多数确定差异的解决方案都会对不适合我的情况的数组进行排序。

示例

arr_1 = [0, 1, 4, 0, 2, 2, 0, 3, 5, ... , 5, 5, 6]

arr_1 = [0, 1, 0, 0, 0, 2, 0, 3, 0, ... , 5, 0, 6]

希望返回类似的内容:

solut = [0, 0, 1, 0, 1, 0, 0, 0, 1, ... , 0, 1, 0]

甚至

solut = [2, 4, 8, ..., n-2]

在 numpy 中有没有一种有效的方法来做到这一点?

你可以只写arr = arr_1 == arr_2。此代码为您提供一个布尔数组,如果它们相等则为 true,否则为 false。然后你可以使用 np.where 来查找数组是否相等的索引。

我会按照

的方式利用numpy.equal
import numpy as np 
arr_1 = [0, 1, 4, 0, 2, 2, 0, 3, 5, 5, 5, 6]
arr_2 = [0, 1, 0, 0, 0, 2, 0, 3, 0, 5, 0, 6]
solut = (~np.equal(arr_1, arr_2)).astype(int)
print(solut)

产出

[0 0 1 0 1 0 0 0 1 0 1 0]

解释:使用numpy.equal得到Falses和Trues的数组,其中arr_1-arr_2对相等,然后取反(使用~) 最后将布尔值转换为 int。如果您对非零索引感兴趣,请使用 numpy.flatnonzero 函数:

indices = np.flatnonzero(solut)
print(indices)

产出

[ 2  4  8 10]

在这种情况下,您不需要在输入 numpy.flatnonzero.

之前将数组转换为 ints