Pythonにおけるconvolve()の利用方法を現役エンジニアが解説【初心者向け】
初心者向けにPythonにおけるconvolve()の利用方法について現役エンジニアが解説しています。convolve()関数は、PythonのNumpyライブラリの関数で、畳み込み演算を行なうために用いられます。Pythonのconvolveを使って、移動平均の計算方法を解説します。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
Pythonにおけるconvolve()の利用方法について、TechAcademyのメンター(現役エンジニア)が実際のコードを使用して、初心者向けに解説します。これが使えるようになると、画像処理や画像認識ができるようになります。ぜひ参考にしてみてください。
Pythonについてそもそもよく分からないという方は、Pythonとは何なのか解説した記事を読むとさらに理解が深まります。
なお本記事は、TechAcademyのオンラインブートキャンプ、Python講座の内容をもとに紹介しています。
今回は、Pythonに関する内容だね!
どういう内容でしょうか?
Pythonにおけるconvolve()の利用方法について詳しく説明していくね!
お願いします!
この記事では、Python初心者の方に向けて、畳み込み演算で使われるconvolve()関数について解説します。
convolve()とは?
convolve()関数は、PythonのNumpyライブラリに組み込まれた関数で、「畳み込み演算」という計算を行なうために用いられる便利な関数です。
convolve()関数の使い方について説明する前に、まずは「畳み込み演算」とはどのようなものか解説しましょう。
「畳み込み演算」というのは、他にもいろいろな呼び方があり、「畳込み積分」とか、「合成積」とか、「コンボリューション積分」など様々です。
もしかすると、「コンボリューション」という言葉は、最近流行りのディープラーニングで、Convolutional Neural Network、略してCNNという画像認識のモデルを知っている人は聞いたことがある言葉かもしれません。
このように、様々な言い方がされているということは、様々な分野で使われている非常に便利な計算手法である、ということが想像できると思います。
畳み込み演算は、いわゆる「信号処理」の分野で非常によく使われ、画像処理なども当てはまります。
Pythonで画像処理がしたい方、ディープラーニングで画像認識をしたいと思って勉強中の方などは勉強しておくと後々非常に助かると思います。畳み込み演算で具体的に行なっていることは、移動しながら計算をする、ということです。
convolve()関数の場合は1次元配列の処理であるので少し異なりますが、下のGIF画像のような形で計算を進めていきます。
convolve()の使い方
convolve()の使い方は難しくありません。次のように記述します。
numpy.convolve(配列, フィルタ配列, (演算のモード))
引数には配列型の変数を2つ渡します。
1つ目の配列は演算される方の配列で、2つ目の配列はどのような演算をするかを指定する配列です。3つ目の引数には、演算の範囲を指定する引数を代入しますが、今回はそこまで気にしなくても問題ありません。ただ、詳しく知っておきたいという方はドキュメントなどを参照してみてください。
実際にconvolve()関数を使う場合は次のように行ないます。Numpyからインポートして、畳み込み演算をしたい配列を引数に渡すだけです。Numpyをまだインストールしていない!という方は、コマンドラインで、
pip install Numpy
を実行して、Numpyをインストールしておきましょう。
インストールしたら、次のように記述すれば、畳込み演算を行なった結果を得ることができます。(※before_array, filter_arrayはあらかじめ定義しておく必要があります。)
import numpy as after_array = np.convolve(before_array, filter_array, )
convolve()を利用して移動平均の計算処理してみよう
それでは実際にconvolve()関数を使ってみましょう。今回は、畳込み演算でもよく使われる、「移動平均」という計算をしてみます。これは、フィルタとなる配列として
[1/4, 1/4, 1/4, 1/4]
という、要素が1/(フィルタ配列の長さ)である配列を使います。
この配列をフィルタとして使うことによって、フィルタの長さ分だけ周囲の要素の値も含めた平均を要素に持つ配列を得られることができます。
この「移動平均」という処理は信号のノイズを軽減したい場合などによく使われます。
今回は、次の配列の移動平均を取得したいと思います。
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
「移動平均」の処理を行なうコードは以下のようになります。
import numpy as np before_array = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) filter_array = [1/4, 1/4, 1/4, 1/4] after_array = np.convolve(before_array, filter_array) print(after_array)
これを実行すると次のように表示されると思います。
[0.25 0.75 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 6.75 4.75 2.5 ]
これが、移動平均の計算結果です。
実際の計算は次のように行なわれています。
フィルタ配列を変更することによって、ほかにも様々な処理を行なうことができるので、ぜひ遊んでみてください。
以上、この記事ではPythonで畳み込み演算を行なうための関数であるconvolve()関数について解説しました。ディープラーニングなどでも似たような処理を行なうことがあるので覚えておくと役に立つと思います。
監修してくれたメンター
メンターOS
AIプログラミングを使って開発を行う。 プログラミング歴は約3年でPythonは割と得意。好きな物理理論は一般相対性理論で動物も好き。 |
内容分かりやすくて良かったです!
ゆかりちゃんも分からないことがあったら質問してね!
分かりました。ありがとうございます!
TechAcademyでは、初心者でも、Pythonを使った人工知能(AI)や機械学習の基礎を習得できる、オンラインブートキャンプを開催しています。
また、現役エンジニアから学べる無料体験も実施しているので、ぜひ参加してみてください。