假设我有一个x
带有数字的列表,以及另一个y
带有其他数字的列表。的元素y
应该是 的元素x
,但由于测量中的噪声,它们有点不同。对于 的每个值,我想找到最接近它y
的值。x
我可以用一些循环来做到这一点,并检查每个元素y[i]
,哪个元素x[j]
最小化abs(x[j]-y[i])
,但我很确定有一种更简单、更清洁的方法来做到这一点。列表可能很大,所以我在这里寻找有效的代码。
到目前为止我写的代码是:
x_in = [1.1, 2.2, 3, 4, 6.2]
y_in = [0.9, 2, 1.9, 6, 5, 6, 6.2, 0.5, 0, 3.1]
desired_output = [1.1, 2.2, 2.2, 6.2, 4, 6.2, 6.2, 1.1, 1.1, 3]
y_out = []
for y in y_in:
aux = [abs(l - y) for l in x_in]
mn,idx = min( (aux[i],i) for i in range(len(aux)) )
y_out.append(x_in[idx])
>>> y_out == desired_output
True
但我不知道是否有更有效的方法来做到这一点......
编辑:
由于我的无知,我忘记根据收到的评论澄清一些可能相关的内容。
- 这
x
列表已排序 x
是唯一可以具有相当大尺寸的列表:通常在 500,000 到 1,000,000 个元素之间。y
通常会非常小,少于 10 个元素。