【问题标题】:Determining the indicies where 2 numpy arrays differ确定 2 个 numpy 数组不同的索引
【发布时间】:2021-04-26 08:53:29
【问题描述】:

我有 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 中有没有一种有效的方法来做到这一点?

【问题讨论】:

    标签: python numpy array-difference


    【解决方案1】:

    我会按照以下方式利用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]
    

    在这种情况下,您无需将数组转换为ints 即可输入numpy.flatnonzero

    【讨论】:

    • 还有np.flatnonzero 适用于一维数组,solut 是。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-07-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-17
      • 2021-07-21
      • 1970-01-01
      • 2018-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多