Python 有没有一种方法可以找到一个整数偏移量,当添加到一个numpy数组中的每个值时,它与另一个数组的匹配量会最大化?
例如,假设我有两个列表:Python 有没有一种方法可以找到一个整数偏移量,当添加到一个numpy数组中的每个值时,它与另一个数组的匹配量会最大化?,python,arrays,numpy,Python,Arrays,Numpy,例如,假设我有两个列表: a = np.array([1, 3, 5, 6, 8, 9]) b = np.array([103, 104, 106, 107, 108, 109]) 我想添加的值是~100,作为偏移量添加到列表a中,以匹配给定偏移量的列表b中尽可能多的值 我目前的解决方案基本上是 best_matches = [] for v1 in a: for v2 in b: offset = abs(v1 - v2) matches = np.i
a = np.array([1, 3, 5, 6, 8, 9])
b = np.array([103, 104, 106, 107, 108, 109])
我想添加的值是~100,作为偏移量添加到列表a中,以匹配给定偏移量的列表b中尽可能多的值
我目前的解决方案基本上是
best_matches = []
for v1 in a:
for v2 in b:
offset = abs(v1 - v2)
matches = np.intersect1d(a + offset, b)
best_matches.append((offset, len(matches)))
best_offset = max(best_matches, key = lambda i : i[1]) # find offset that had the most amount of intersections when added to the first array
我需要一个解决方案来处理相当大的值列表,所以这个解决方案要么更有效,要么在方法上有所不同。感谢您的帮助 相当于您的答案,没有循环:
o = np.bincount(np.ravel(b[:,None] - a[None,:])).argmax()
l = len(np.intersect1d(b, (a + o)))
根据
实际答案是
(103,4)
,而不是(101,4)
。您不能只执行np.bincount(b-a).argmax()
其中b-a
是元素相减。相反,您需要减去b和a中所有可能的元素组合。。@AlexanderS.Brunmayr。现在好点了吗?但是,argmax
的响应是(98,4)
您不需要使用A
和B
的复杂设置代码,广播可以通过几个片段为您完成。试试b[:,无]-a[None,:]
@Blckknght,真的谢谢你@科雷恩。很抱歉,(101,4)不是“实际”答案,它确实是众多解决方案之一,正如(98,4)一样。是的,现在好多了:我喜欢这个答案。(顺便说一句,那太酷了,我不知道你能做到)
>>> (o, l)
(98, 4)