给出一组数字:
A = np.array([12,10,7,4,2,0,-3])
和另一组值:
B = np.array([14,8.8,2.3,-4,5.5])
python中是否有一个方法可以将B四舍五入到最接近的A?
答案 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])