[解決済み] numpy.correlateを使って自己相関をするにはどうしたらいいですか?
質問
数値の集合の自己相関をしたいのですが、私の理解では、集合とそれ自体の相関です。
私はnumpyのcorrelate関数を使ってそれを試してみましたが、私はその結果を信じていません。なぜなら、それはほとんど常に最初の数字であるベクトルを与えるからです。 ない ということです。
つまり、この質問は本当は2つの質問なんです。
-
とは一体何なのでしょうか?
numpy.correlate
をしているのでしょうか? - これを使って(あるいは他のものを使って)自己相関を行うにはどうしたらよいでしょうか?
どのように解決するのですか?
最初の質問にお答えします。
numpy.correlate(a, v, mode)
の畳み込みを行っています。
a
の逆で
v
で、指定したモードで切り取った結果を出力します。その
コンボリューションの定義
, C(t)=Σ
<サブ
-∞ < i < ∞(イコール)。
a
<サブ
i
v
<サブ
t+i
ここで、-∞ < t < ∞は、-∞から∞までの結果を可能にしますが、無限に長い配列を格納することは当然できません。そこで、切り取る必要があるのですが、そこで登場するのがモードです。モードには、full、same、& validの3種類があります。
-
full"モードでは、すべての
t
ここでa
とv
は重なる部分があります。 -
"same"モードは、最短のベクトルと同じ長さの結果を返します(
a
またはv
). -
モードは、以下の場合にのみ結果を返します。
a
とv
は完全に重なり合っています。その ドキュメント に対してnumpy.convolve
は、モードに関するより詳細な情報を提供します。
2つ目の質問に対して、私は
numpy.correlate
は
は自己相関を与えてくれますが、それ以上のものも与えてくれます。自己相関は、ある信号や関数が、ある時間差で自分自身にどれだけ似ているかを見つけるために使われます。時間差が0のとき、信号はそれ自身と同一なので、自己相関は最も大きくなるはずで、自己相関の結果配列の最初の要素が最も大きくなると予想されましたね。ところが、相関は時間差0で始まるのではなく、時間差がマイナスから始まり、0に近づき、プラスになる。つまり、あなたの予想通りです。
autocorrelation(a) = ∑ (オートコリレーション) <サブ -∞ < i < ∞(イコール)。 a <サブ i v <サブ t+i ここで、0 <= t < ∞である。
しかし、得られたのは
autocorrelation(a) = ∑ (自己相関) <サブ -∞ < i < ∞(無限大 a <サブ i v <サブ t+i ここで、-∞ < t < ∞とする。
相関の結果の下半分を取れば、それが求めている自己相関になるはずです。これを行うための簡単なPython関数は以下の通りです。
def autocorr(x):
result = numpy.correlate(x, x, mode='full')
return result[result.size/2:]
もちろん、エラーチェックが必要なのは
x
は実際には1-d配列です。また、この説明はおそらく最も数学的に厳密なものではないでしょう。畳み込みの定義では無限大を使うので無限大をばらまいてきましたが、自己相関の場合は必ずしもそうではありません。このように、この説明の理論的な部分は少しおかしいかもしれませんが、実用的な結果が役に立つことを期待しています。
これらの
ページ
自己相関についてはかなり有用で、表記や重い概念を気にしなければ、より良い理論的背景を得ることができます。
関連
-
pythonを使ったオフィス自動化コード例
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がない
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み] Windowsにpipをインストールするにはどうしたらいいですか?
-
[解決済み] NaN値をチェックするにはどうすればよいですか?
-
[解決済み] 簡単な面接問題が難しくなった:1~100の数字が与えられたとき、ちょうどk個の数字が欠けていることを見つけなさい。
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python 人工知能 人間学習 描画 機械学習モデル作成
-
PythonでECDSAを実装する方法 知っていますか?
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み】OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。
-
[解決済み】csv.Error:イテレータはバイトではなく文字列を返すべき
-
[解決済み】Django: ImproperlyConfigured: SECRET_KEY 設定は空であってはならない
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み】"No JSON object could be decoded "よりも良いエラーメッセージを表示する。
-
[解決済み】Flaskのテンプレートが見つからない【重複あり
-
[解決済み】ValueError: xとyは同じサイズでなければならない