KUMICO

COLUMN

組み込みエンジニアの戸惑い Pythonでnumpyを使ってみる

組み込みソフトウェアエンジニアがPythonを始めてみました。そして、第4の戸惑い、今回はPythonでも出番の多いNumpyについてのご紹介です。

Numpy?
機械学習を学び始めるとすぐに登場するNumpy。機械学習以外でもデータを多く扱うシステムではとても便利なPythonライブラリの一つです。そもそも何と読むのか?正解は「ナンパイ」なんですが、どうしても頭の中では「ナンピー」と読んでしまうのは私だけでしょうか…。そんなことはさて置き、Numpyは何ができるのか?簡単に言うと多次元配列の演算が高速に行える。そのため機械学習や画像処理、音声処理には打って付け、勿論それ以外にも多くの場面で役立つライブラリです。また、配列の扱いや各種演算処理が数多く用意されているのでシンプルなコードになるのが特徴です。

Listとの違い
シンプルなコードになると言われても、いまいちピンと来ないと思います。そこで、配列と言えばPython標準のListがあるのですが、どのような違いがあるのか簡単な例を挙げてListとNumpyの違いを見てみましょう。

Listの例

>>> A = [ 1, 2, 3 ]
>>> B = [ 4, 5, 6 ]
>>> C = A + B
>>> print C
[ 1, 2, 3, 4, 5, 6 ]

Numpyの例

>>> import numpy as np
>>> A = np.array( [ 1, 2, 3 ] )
>>> B = np.array( [ 4, 5, 6 ] )
>>> C = A + B
>>> print C
[ 5, 7, 9 ]

Listの例では配列と配列の和、すなわち配列同士をつなぐ形となりましたが、Numpyでは要素ごとの和が得られる形となっています。Listではfor文を使わないと得られない行列演算の結果がNumpyを使うといとも簡単に得られてしまいます。同じように減算、乗算、それ以外にも多くの演算が行えます。そのため、余計なコードなしにあなたの思い描く行列演算が実装可能となっているのです。
1つ注意点として、Numpyではndarrayと言うListやarray.arrayとは別のデータフォーマットとなるので、それぞれを混同しないようにする必要があります。

演算処理
続いて、Numpyの演算処理とはどのようなことができるのでしょうか。上で述べた加算、減算、乗算など要素ごとに演算を行い、結果も同じ要素数となるものを「ユニバーサル関数」と呼ぶのですが、べき乗、AND、OR、NOT、XOR、比較、三角関数、指数関数、対数関数など様々な演算が用意されています。実はユニバーサル関数を自作することもできてしまうという、痒い所に手が届きすぎて痒い所がない状態です。
これだけでは終わりません、ユニバーサル関数以外の関数も多くあり、最大、最小、平均、分散、和集合など統計に関する関数、C言語ライブラリを使用した線形台数、乱数生成、フーリエ変換も用意されています。

バイナリデータの高速読み込み
最後に、前回先延ばしにしていたバイナリデータの扱いに関して、画像ファイルや音声ファイル、通信データなど大容量のデータをバイナリからndarray配列に変換する場合にもちゃんと関数が用意されています。

関数名 内容
numpy.fromfile バイナリファイル から ndarray 1次元配列へ変換
numpy.frombuffer bytes からndarray 1次元配列へ変換

numpy.fromfileの例

>>> # test.binの中身 : b’abcdef’
>>> A = np.fromfile( ‘test.bin’, dtype=np.uint8 )
>>> print A
[ 97, 98, 99, 100, 101, 102 ]

numpy.frombufferの例

>>> src = b’abcdef’
>>> A = np.frombuffer( src, dtype=np.uint8 )
>>> print A
[ 97, 98, 99, 100, 101, 102 ]

これらを使ってデータを読み込めば、機械学習やフィルタ処理などあなたの思い描く演算にNumpyを使って簡単、高速に処理できてしまうわけですね。

次回は、組み込みと言えばやっぱりC言語は外せない「PythonでC言語を呼び出してみよう(仮)」の巻。

個別相談も承っております。下記よりお申し込みください。

個別相談会申し込み

シリーズ記事

関連記事

OTHER COLUMN

MORE  

まこちゃんブログ

NEWS

MORE  

PARTNER

  • Intel
  • Xilinx

お探しの組み込み製品はキーワードで検索!