2012-04-04 74 views
3

我有16个1D数组,每个数组大约有10-11百万个双精度元素。我需要在它们之间执行互相关,即,1与2,1与3,...,1与16,2与3,2与4,...,2与16等等。这在我的MacBook Intel Core 2 duo 2.4 GHz,4GB内存上无法高效完成。我的问题是,什么是典型的方法,即使不是蛮力(更快的处理器,更多的RAM),人们用来克服这个问题,还是像它这样的问题?谢谢!中等大小阵列的互相关

回答

2

如果计算每个阵列的傅里叶变换,您应该使用 可以使用变换后的阵列来高效计算每对原始输入阵列之间的cross-correlation。请参阅 维基百科文章的“属性”部分,我链接到要使用的身份。

+0

我知道这个身份。我使用NumPy,它直接计算互相关。用这个标识来计算互相关是否会显着加快计算速度,即足够让我不必在一夜之间运行它? – 2012-04-04 22:48:59

+0

@cpcloud:我不是Python专家,但我搜索了一下,发现SO上的其他地方有答案,声称NumPy没有使用FFT技术。 (所以如果一个阵列比另一个阵列小得多,但是对于你所关心的情况来说速度会很慢)。计算一千万点阵列的FFT不应该花太长时间,如果您使用傅立叶身份实施互相关程序,则期望看到显着的加速。 – 2012-04-04 23:08:30

+0

谢谢!你能发布一个链接到你找到这些信息的地方吗?非常感激! – 2012-04-04 23:18:46

1

numpy中的互相关函数是慢得可笑的。 openCV库有一个numpy友好的互相关函数可用。即使您尝试实现频域方法,您也不会击败openCV库,因为有更多技巧可用于加速互相关计算。我张贴了关于在此之前:

Computing cross-correlation function?

我相信代码是基于下面的文件中详述的招数:在视觉接口,1995

JP刘易斯,“快速模板匹配”,第一卷。 95,第120-123页。