2012-04-04 5 views
3

私はそれぞれ約10-100万の倍精度要素を持つ16個の1D配列を持っています。私はそれらの間に相互相関を実行する必要があります。すなわち、1と2、1と3、...、1と16、2と3、2と4、...、2と16など。これは、MacBook Intel Core 2デュオ2.4GHzでは4GBのRAMで効率的に実行することはできません。私の質問は、一般的なアプローチは何か、ブルートフォース(速いプロセッサ、より多くのRAM)ではなく、人々がこの問題を克服するために使用するかどうか、またはそのような問題ですか?ありがとう!中規模の配列の相互相関

答えて

2

各アレイのフーリエ変換を計算する場合は、 変換された配列を使用して元の入力配列の各ペアの間でcross-correlationを効率的に計算する必要があります。 の「プロパティ」セクションを参照してください。使用するアイデンティティーについてはリンク先のWikipediaの記事を参照してください。

+0

私はこの身元について知っています。私は相互相関を直接計算するNumPyを使用しています。このアイデンティティを使用して相互相関を計算すると、計算が高速になります。つまり、一晩中実行する必要はありません。 –

+0

@cpcloud:私はPythonのエキスパートではありませんが、私はちょっと調べて、NumPyがFFTテクニックを使用していないと主張したSOの別の場所で答えを見つけました。 1つの配列が他の配列よりもはるかに小さい場合は多少速くなりますが、関心がある場合は遅くなります)。1000万点の配列のFFTを計算するのは時間がかかり過ぎないはずです。フーリエ識別を使用して相互相関ルーチンを実装した場合、大幅なスピードアップが見込まれます。 –

+0

ありがとう!この情報を見つけた場所へのリンクを投稿できますか?とても有難い! –

1

numpyの相互相関関数は非常に遅いです。 openCVライブラリには、親しみやすい親密な相互相関関数が用意されています。周波数領域を実装しようとしても、相互相関計算を高速化するために利用可能な多くの技があるので、openCVライブラリを打ち負かすことはありません。

JPルイス、「高速テンプレートマッチング、」ビジョン・インタフェース、1995年、巻中:私は、コードは以下の論文で詳述トリックに基づいていると信じ

Computing cross-correlation function?

:前に私はこれについて投稿しました。 95巻、120-123頁。