首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大双阵列中小双阵列的最佳匹配

大双阵列中小双阵列的最佳匹配
EN

Stack Overflow用户
提问于 2012-07-04 21:01:38
回答 1查看 261关注 0票数 2

我正在尝试将一个大小为~20的小数组与一个大小为约200000的数组进行匹配。两个数组都包含双精度值。在这种情况下,匹配意味着最小的误差,因为不会有精确匹配。

下一件事是,我必须更改小数组的值,因为如果它不同,但值之间有相同的间隔,它也应该匹配,这意味着:

代码语言:javascript
复制
array 1: [1.3, 1.4, 1.3, 1.5, 1.7]
array 2: [..., 2.3, 2.4, 2.4, 2.5, 2.7, ...]

我必须将每个比较的最后一个元素带到相同的数字。上面的例子将是一个非常好的匹配,因为首先我会+1.0整个数组#1。

编辑以澄清上面的陈述:在计算误差之前,示例数组应该如下所示:

代码语言:javascript
复制
array 1: [2.3, 2.4, 2.3, 2.5, 2.7] 
// (+1 of each element so the last element of the small array, 
// and the last element of the part of the large array I am 
// comparing to, has the same values: in this case: 2.7)
array 2: [..., 2.3, 2.4, 2.4, 2.5, 2.7, ...]

/edit

我知道简单地迭代大数组是可能的,但太慢了。当然,我可以使用像norm(v1 - v2)这样的向量操作,而不是通过迭代数组来计算误差。

我听说,python非常适合数学运算,但我找不到任何如何比较两个数组(一个数组中只有一个数字)的方法。

最后,问题是:任何想法,我如何能以一种真正快速的方式解决问题。哪种语言可以很好地解决这类问题(octave不是因为它在矢量计算上很快,但在迭代时很慢)--可能在python中有一些很好的库?

如果我需要更详细的解释,请告诉我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-13 12:06:57

我承认我对如何定义最佳匹配有点模糊,但这个示例可以很容易地进行调整。神奇之处在于closeness函数,它接收与target长度相同的data片段,并返回一个数字。数字越小,匹配效果越好。

代码语言:javascript
复制
import random

target = [random.random() * 10 for i in range(20)]
data   = [random.random() * 10 for i in range(200000)]

def closeness(a_range):
    diffs = list(map(lambda e: e[0]-e[1], zip(a_range, target)))
    avg_diffs = float(sum(diffs)) / len(diffs)
    adjusted_target = [i + avg_diffs for i in target]
    return sum(adjusted_target)

ranges = [data[i:i+len(target)] for i in range(len(data)-len(target))]
best_match = min(ranges, key=closeness) 

print(best_match)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11329668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档