PythonのNumpyで複素数の相関係数を計算したかった
アブスト
Python3.5で@演算子による行列計算ができるようになった(y=A@x)
のを機に,Pythonで研究を進めた.
複素数をバリバリに扱う内容で,numpy.corrcoefに複素数を適当に突っ込んだら全く意図しない挙動を示した.
corrcoefが複素数に対応していないのかと思って自力で実装したりしたが,結局Pythonが悪いのではなく,自分が突っ込んだ数列がマズかった.
問題の挙動
以下のコードで確認できます.
import numpy as np
s1=np.array([1+1.0j,1+2.0j])
s2=np.array([1+1.0j,1+1.0j])
cor = np.corrcoef(s1,s2)
print(cor)
原因
信号のエネルギーが0だと,分散が0になり,結果0除算になってNaNになる.
上記の例ではs2が直流(信号のエネルギーは0)となっている.