数组中每个值相对于其他值的最小距离

时间:2019-05-07 14:15:24

标签: python numpy data-science

我有两个numpy数组,分别是整数A和B。数组A和B中的值对应于事件A和B发生的时间点。我想将A转换为包含自最近事件b发生以来的时间。

我知道我需要将A的每个元素减去最接近的B元素,但是不确定如何这样做。任何帮助将不胜感激。

>>> import numpy as np

>>> A = np.array([11, 12, 13, 17, 20, 22, 33, 34])
>>> B = np.array([5, 10, 15, 20, 25, 30])

所需结果:

cond_a = relative_timestamp(to_transform=A, reference=B)
cond_a
>>> array([1, 2, 3, 2, 0, 2, 3, 4])

3 个答案:

答案 0 :(得分:2)

您可以使用np.searchsorted查找应该在A中插入B的元素以保持顺序的索引。换句话说,对于B中的每个元素,您正在A中找到最接近的元素:

idx = np.searchsorted(B, A, side='right')
result = A-B[idx-1] # substract one for proper index

根据docs搜索排序使用binary search,因此对于较大的输入它可以很好地缩放。

答案 1 :(得分:1)

这是一种基于成对差异的计算方法。请注意,它的复杂度为O(n**2),因此对于较大的数组,@ brenlla的答案可能会更好。

这里的想法是使用np.subtract.outer,然后在1上找到沿轴masked array的最小差异,其中B中的值仅小于{{1} }被认为:

a

答案 2 :(得分:0)

由于我不确定,是否真的可以更快地计算所有成对差异,而不是在每个数组条目上进行python循环(最坏的情况是O(Len(A)+ len(B)),请使用循环的解决方案:

--mouseX/--mouseY