2012-04-04 5 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 ГГц, с 4 ГБ оперативной памяти. Мой вопрос в том, каков типичный подход, если не грубая сила (более быстрый процессор, больше оперативной памяти), которую люди используют для преодоления этой проблемы, или проблемы вроде этого? Благодаря!Перекрестная корреляция средних массивов

ответ

2

Если вы вычисляете преобразование Фурье каждого из ваших массивов, вы должны использовать , чтобы использовать преобразованные массивы для эффективного вычисления cross-correlation между каждой парой исходных входных массивов. См. Раздел «Свойства» в статье . Статья Википедии, к которой я привязан, используется для идентификации.

+0

Я знаю об этом. Я использую NumPy, который напрямую вычисляет кросс-корреляцию. Будет ли вычисление кросс-корреляции с использованием этой идентичности заметно ускорить вычисление, т. Е. Достаточно, чтобы мне не пришлось запускать ее в одночасье, скажем? –

+0

@cpcloud: Я не эксперт на Python, но немного искал язык и нашел ответ в другом месте на SO, который утверждал, что NumPy не использовал технику FFT. (Так что, вероятно, было бы немного быстрее, если бы один массив был намного меньше, чем другой, но медленный для случая, о котором вы беспокоитесь.) Вычисление БПФ массива в 10 миллионов точек не должно занять слишком много времени, d ожидаем увидеть значительное ускорение, если вы выполнили процедуру взаимной корреляции с использованием тождества Фурье. –

+0

Спасибо! Не могли бы вы разместить ссылку на эту информацию? Очень признателен! –

1

Функция взаимной корреляции в numpy смехотворно медленна. В библиотеке openCV имеется многочисленная дружественная функция взаимной корреляции. Даже если вы попытаетесь реализовать aproach частотной области, вы не будете бить библиотеку openCV, так как есть больше возможностей для ускорения вычисления кросс-корреляции. Я отправил об этом раньше:

Computing cross-correlation function?

Я считаю, что код основан на уловок, описанных в следующей статье:

JP Льюис, «согласование быстрого шаблона», в видении интерфейс, 1995, том , 95, pp. 120-123.