【问题标题】:Compare elements in two 1D arrays of different size, with tolerance [duplicate]比较两个不同大小的一维数组中的元素,具有公差[重复]
【发布时间】:2018-04-06 16:47:42
【问题描述】:

我想找出数组“A”中存在的哪些值也存在于数组“B”中。但是,数组的大小不同,我想引入一个容差,因为两个数据集之间可能存在系统误差。

我知道'np.isclose',但这是针对相同大小的数组。

【问题讨论】:

    标签: python arrays python-3.x numpy


    【解决方案1】:

    您可以通过使用稍微更内置的 numpy 解决方案来改进嵌套循环:

    import numpy as np
    
    A = np.array([0, 0.3141, 1.234, 4.1341, -34.112])
    B = np.array([0.3142, 2.234, 4.1340, -34.113, 40])
    res = {i for i in A if np.isclose(B, i, 0.1).any()}
    print(res)
    

    输出:

    {0.3141, 4.1341, -34.112}
    

    时间安排:

    In [2]: %timeit {i for i in A if np.isclose(B, i, 0.1).any()}
    276 µs ± 16.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
    
    In [3]: %timeit {x for x in A for y in B if np.isclose(x, y, atol=0.1)}
    1.08 ms ± 12 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
    

    【讨论】:

    • 很好,+1。但我仍然希望有人有一个 numpy 解决方案。
    • 是的,我也是。这是我经常遇到的事情。
    【解决方案2】:

    嵌套的 for 循环会起作用,但我建议你等着看是否有 numpy 解决方案。

    import numpy as np
    
    A = np.array([0.3141, 1.234, 4.1341, -34.112])
    B = np.array([0.3142, 2.234, 4.1340, -34.113])
    
    res = {x for x in A for y in B if np.isclose(x, y, atol=0.1)}
    
    print(res)
    
    # {-34.112000000000002, 0.31409999999999999, 4.1341000000000001}
    

    【讨论】:

      【解决方案3】:

      尚不清楚数组是否具有不同尺寸的不同尺寸。如果它们具有相同的维度但不同的大小,使用 Numpy 的内置 intersect1d 很容易计算它们的共同元素:https://docs.scipy.org/doc/numpy/reference/generated/numpy.intersect1d.html

      >>> import numpy as np
      >>> A = np.array([1, 2, 3, 4, 5, 6])
      >>> B = np.array([4, 5, 6, 7])
      >>> C = np.intersect1d(A, B)
      >>> print C
      [4 5 6]
      

      如果它们具有不同的尺寸,您可能必须遵循此处描述的方法:Find common elements in 2D numpy arrays

      【讨论】:

      • “我想引入一个容差,因为两个数据集之间可能存在系统误差”
      猜你喜欢
      • 2020-03-09
      • 2018-06-18
      • 1970-01-01
      • 2019-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-27
      • 1970-01-01
      相关资源
      最近更新 更多