Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有一种方法可以找到一个整数偏移量,当添加到一个numpy数组中的每个值时,它与另一个数组的匹配量会最大化?_Python_Arrays_Numpy - Fatal编程技术网

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)