比较两个不同大小的1D阵列中的元素,并具有容差

时间:2018-04-06 16:47:43

标签: python arrays python-3.x numpy

我想找到阵列'A'中存在的数值'B'中存在的值。但是,阵列的大小不同,我想引入容差,因为两个数据集之间可能存在系统误差。

我知道'np.isclose',但这适用于相同大小的数组。

3 个答案:

答案 0 :(得分:1)

嵌套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}

答案 1 :(得分: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)

答案 2 :(得分:-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