2つの時系列波形がどの程度相互依存しているか、もしくは類似しているかを示すもの。
---
ベクトルの内積は,ベクトル同士が角度が近いとき($\theta$が0に近いとき)大きな値を示す.
$\bf{a} \cdot \bf{b}=|\bf{a}||\bf{b}|\cos\theta$
同じ長さ(次元)をもつベクトル同士であれば内積は簡単に計算できるが,ベクトルの長さが異なるケースもある.相互相関では,長さが異なる場合は短いベクトルに0を付加して長さを揃えて,ベクトルをずらしながら内積を計算していく.可能なシフトのうち内積が最大となるシフトを見つける.
---
[www.slp.k.hosei.ac.jp/~itou/lecture/2011/DigitalData/06_text.pdf](http://www.slp.k.hosei.ac.jp/~itou/lecture/2011/DigitalData/06_text.pdf)
$\newcommand{\bm}[1]{\boldsymbol{#1}}$
$cos \theta = \cfrac{\bm{a} \cdot \bm{b}}{||\bm{a}||||\bm{b}||}$
$cos\theta$は向きが同じときに最大で、似てないほど小さくなる。$cos\theta$を類似度として用いる。
ただし、ベクトル長を揃えた系列でなければ、内積やユークリッド距離を簡単に計算できない。
---
[numpy.correlate — NumPy v1.22 Manual](https://numpy.org/doc/stable/reference/generated/numpy.correlate.html)
> numpy.correlateは、畳み込みを計算するためにFFTを使用しないので、大きな配列(すなわち、n = 1e5)では、パフォーマンスが遅くなることがあります; その場合、scipy.signal.correlateが望ましいかもしれません。
- 2つのベクトル長が同じ場合は`mode="valid"`を選ぶ。
- [numpy.convolve — NumPy v1.22 Manual](https://numpy.org/doc/stable/reference/generated/numpy.convolve.html#numpy.convolve)
> The two arrays are of the same length, so there is only one position where they completely overlap:
[scipy.signal.correlate — SciPy v1.8.0 Manual](https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.correlate.html)
---
[numpyとscipyとmatplotlibの相互相関算出方法について、誰も解説してくれないのでまとめる - Qiita](https://qiita.com/SHUsss/items/a357a33849d583093849)