Pythonを使って機械学習をはじめると、膨大な量の数値計算をする必要に迫られるため、計算を効率的に行うモジュール「NumPy」を使うことが多くなります。
NumPyは、機械学習で必須となるベクトルや行列などの多次元配列のデータを簡単に扱えるようにしてくれるだけでなく、計算を高速に処理してくれるなど、とても便利なモジュールです。
そこで今回は、Pythonで機械学習をする方には必須のNumPyの導入方法と簡単な使い方を紹介します。
NumPyの導入方法
まずは「NumPy」がインストールされているか確認しましょう。
Windowsの場合は、コマンドプロンプト(「Windowsシステムツール」⇒「コマンドプロンプト」)を立ち上げ、「python」と入力した後に、pythonのコンソールで以下のコマンドを実行します。
import numpy
エラーが出なければインストールできています。エラーが出た場合は、「CTL+Z」⇒「Return」でpythonのコンソールから抜け出し、以下のコマンドでインストールしましょう。
pip install numpy
ちなみに、インストールされている状態で、以下のサンプルコードを作成して実行(「python numpy_version.py」と入力)すれば、NumPyのバージョンが確認できます。
◆サンプルプログラム(numpy_version.py):
import numpy as np print(np.__version__)
◆実行結果:
1.18.1
NumPyの使い方
「NumPyの使い方」と一言でいっても幅広いため、ここではよく使われる機能に絞って紹介します。
NumPyの配列(ndarray)の使い方
NumPyの基本は、ndarrayという配列をつくるところから始まります。
ndarrayは多次元配列を扱うためのクラスで、1次元であればベクトル、2次元であれば行列、3次元以上であればテンソルと呼ばれます。
まずは、1次元配列(ベクトル)のサンプルプログラムから見ていきましょう。
◆サンプルプログラム:
import numpy as np vector1 = np.array([1,2,3]) print(vector1)
◆実行結果:
[1 2 3]
NumPyはライブラリなので、最初にimportする必要があります。また、numpyをnpという名前でimportするのが慣習になっているので、特別な理由がない限り「np」としてimportしましょう。
※importについて詳しく知りたい方は、以下のエントリを参考にしてください。

あとは、np.arrayに数値を入力すれば、1次元配列が作成できます。
2次元配列(行列)も基本的には1次元配列と同じ方法で作成できます。1次元配列との違いは、複数の配列をカンマ「,」で区切って並べるところです。
◆サンプルプログラム:
import numpy as np vector1 = np.array([[1,2,3],[4,5,6]]) print(vector1)
◆実行結果:
[[1 2 3] [4 5 6]]
もちろん、3次元以上の配列になっても同じです。これで基本的な配列の作り方が理解できました。
配列の計算
では次に、配列の計算方法について簡単に説明します。
次のサンプルプログラムは、ある配列にスカラーを加算した場合とスカラー倍した結果を表示するものです。
◆サンプルプログラム:
import numpy as np vector1 = np.array([[1,2,3],[4,5,6]]) print('add:\n', vector1 + 3) print('mult:\n', vector1 * 3)
◆実行結果:
add: [[4 5 6] [7 8 9]] mult: [[ 3 6 9] [12 15 18]]
配列にスカラーを足すと、それぞれの要素に足されることが、配列にスカラーをかけると、それぞれの要素が定数倍されることがわかります。
このようにNumpy側で配列のサイズをあわせて賢く計算してくれる機能を「ブロードキャスト」と言います。
次のサンプルプログラムのように、配列同士の足し算、引き算、掛け算もできます。
◆サンプルプログラム:
import numpy as np vector1 = np.array([[1,2,3],[4,5,6]]) vector2 = np.array([[7,8,9],[10,11,12]]) print('add:\n', vector1 + vector2) print('sub:\n', vector1 - vector2) print('mult:\n', vector1 * vector2)
◆実行結果:
add: [[ 8 10 12] [14 16 18]] sub: [[-6 -6 -6] [-6 -6 -6]] mult: [[ 7 16 27] [40 55 72]]
ちなみに、行列の積を計算したい場合は、次のサンプルプログラムのように「.dot」関数を使います。
◆サンプルプログラム:
import numpy as np vector1 = np.array([[1,2,3],[4,5,6]]) vector2 = np.array([[7,8],[9,10],[11,12]]) print(vector1.dot(vector2))
◆実行結果:
[[ 58 64] [139 154]]
2×3行列(vector1)と3×2行列(vector2)の積なので、2×2行列が返ってきました。
どれも簡単に計算することが出来ましたね。
NumPyの基本的な関数の使い方
では次に、NumPyの基本的な関数の使い方を説明します。
まずは四則演算です。「np.add」関数で加算、「np.subtract」関数で減算、「np.multiply」関数で乗算、「np.divide」関数で除算が計算できます。
◆サンプルプログラム:
import numpy as np print('add: ', np.add(4,2)) print('sub: ', np.subtract(4,2)) print('mult:', np.multiply(4,2)) print('div: ', np.divide(4,2))
◆実行結果:
add: 6 sub: 2 mult: 8 div: 2.0
次は、累乗と平方根、対数です。「np.pwer」関数で累乗、「np.sqrt」関数で平方根、「np.log」関数で自然対数が計算できます。
◆サンプルプログラム:
import numpy as np print('power:', np.power(4,2)) print('sqrt: ', np.sqrt(4)) print('log: ', np.log(10))
◆実行結果:
power: 16 sqrt: 2.0 log: 2.302585092994046
最後に、三角関数です。「np.sin」「np.cos」「np.tan」で計算できます。
◆サンプルプログラム:
import numpy as np import math rad = math.radians(135) print('sin:', np.sin(rad)) print('cos:', np.cos(rad)) print('tan:', np.tan(rad))
◆実行結果:
sin: 0.7071067811865476 cos: -0.7071067811865475 tan: -1.0000000000000002
ただし、関数に引き渡すのは「度」ではなく「ラジアン」のため、「math.radians」関数を使って度をラジアンに変換してから入力しています。
最後に
今回は、NumPyの導入方法と簡単な使い方を紹介してきました。もちろん他にも便利な機能が数多くありますが、まずは今回紹介した基本を理解してみてはどうでしょうか。
きっと、あれこれ試してみたくなりますよ。
コメント