この記事ではPythonの畳み込みについての理解を中心に紹介しており、詳細なコード例も掲載されており、参考になると思います。
畳み込み関数
python
さまざまな畳み込みスキームが提供されていますが、対照的に、で定義されたndimage
畳み込み関数は、 innumpy
およびinsignal
の畳み込みよりもわずかに複雑です。これは入力パラメータの数からのみわかります。
1 2 3 4 5 |
|
最初の 2 つは 1 次元の畳み込み関数で、 ndimage は単一の座標軸に沿って多次元配列に対して畳み込み演算を実行でき、後の 2 つは多次元の畳み込みです。
numpy と signal の畳み込み関数には 3 つのモードがあり、畳み込み後のエッジ特性を調整するために使用されます。2 つの入力畳み込みオブジェクトの次元が N NN と M MM の場合、これら 3 つのモードの出力は次のようになります。
full
: 出力次元は N + M − 1 N+M-1N+M−1 で、最終点の信号は全く重ならないため、エッジ効果が明らかです。same
: 出力寸法 max ( M , N ) \max(M,N)max(M,N)、エッジ効果はまだ表示されますvalid
: 出力次元 ∣ M − N ∣ |MN|∣M−N∣ は、完全に重複する領域のみを返します。これは、エッジ効果のあるすべての点を削除するのと同じです。
ndimage
エッジ効果の場合convolve
、画像は拡張され、mode
拡張後の塗りつぶし形式が決定されます。フィルタリングされる配列が の場合a b c d
、さまざまなモードでは、エッジは次のように塗りつぶされます。
左パディング | データ | 右パディング | |
---|---|---|---|
reflect |
dcba | あいうえお | dcba |
constant |
クック | あいうえお | クック |
nearest |
ああああ | あいうえお | ああ |
mirror |
DCB | あいうえお | CBA |
wrap |
あいうえお | あいうえお | あいうえお |
このうち、k
パラメータを通じて設定されますcval
。
境界を変更するこれら 5 つの方法は、scipy.ndimage
関数、特に標準の畳み込みを伴うフィルター関数で非常に一般的です。
比較テスト
次に、これらのさまざまな畳み込み関数についてパフォーマンス テストを実行し、5 × 5 畳み込みテンプレートを使用して 1000 × 1000 行列で畳み込み計算を実行し、さまざまな実装の畳み込み速度を確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
比較すると、ndimage
の畳み込みは明らかに効率的です。
接下来测试一下一维卷积的表现
1 2 3 4 5 6 7 8 9 10 11 |
|
相比之下,convolve1d
不愧是写明了1d
的卷积函数,速度最快,而numpy
中提供的函数速度最慢。