将给定向量(B)的每个值四舍五入为A中的最接近值

时间:2018-06-14 07:46:27

标签: python arrays numpy

给出一组数字:

A = np.array([12,10,7,4,2,0,-3])

和另一组值:

B = np.array([14,8.8,2.3,-4,5.5])

python中是否有一个方法可以将B四舍五入到最接近的A?

2 个答案:

答案 0 :(得分:1)

这是一种方法:

res = A[np.abs(A-B[:, None]).argmin(axis=1)]

[12 10  2 -3  7]

要从纯Python的角度理解这是如何工作的,请考虑这个列表理解:

[A[np.abs(A-b).argmin()] for b in B]

请注意,这不涉及关联,argmin提取第一个最小索引。

答案 1 :(得分:1)

这是一个O(n log n)解决方案:

>>> AS = np.sort(A)
>>> bnd = (AS[:-1] + AS[1:]) / 2
>>> nearest = AS[bnd.searchsorted(B)]
>>> 
>>> nearest
array([12, 10,  2, -3,  4])

或者如果你想要将关系四舍五入:

>>> nearest = AS[bnd.searchsorted(B, 'right')]
>>> nearest
array([12, 10,  2, -3,  7])