我有两个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])
答案 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