2012-04-04 112 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頁。