numpyはPythonで学術計算をするためのライブラリです。
numpyはPythonの機械学習でも頻繁に使われるライブラリですので知っておいて損はしません。
この記事では、
・numpyとは
・ndarrayの使い方
というnumpyの基本的な内容から、
・行列の計算
・numpyの基本的な関数
など、より実践的な内容に関しても分かりやすく解説していきます。
※ この記事のコードはPython 3.7で動作確認しました。
本記事を読む前に、Pythonがどんなプログラミング言語なのかをおさらいしておきたい人は次の記事を参考にしてください。
→ Pythonとは?特徴やできること、活用例をわかりやすく簡単に解説
numpyとは
numpyは、Pythonで学術計算をするためのライブラリです。
基本的な計算はPythonだけでも出来ますが、numpyを使うとその計算が高速になったり、より楽になったりします。
Pythonは機械学習ととても関連が強い言語ですが、その中でもnumpyが使われることはとても多いです。
これから機械学習を始める方も、ただnumpyについて知りたいという方も、ぜひnumpyを使った計算方法を学んでおきましょう!
numpyの配列(ndarray)の使い方
numpyにはndarrayというnumpyで使われる配列があります。
ndarrayは多次元配列を扱うためのクラスで、1次元であればベクトル、2次元であれば行列、3次元以上であればテンソルを扱うことが出来ます。
こちらのサンプルコードを見てみましょう。
import numpy as np vec1 = np.array([1,2,3]) print(vec1)
numpyはライブラリですのでimportをする必要があります。
numpyをnpという名前でimportするのが慣例になっているので特別な理由が無ければこのようにimportをしましょう。
またこれ以降のサンプルコードではこの1文は省略して書きます。
実行結果
[1, 2, 3]
このサンプルコードではnp.array関数に配列を渡し、1次元のベクトルを作りました。
2次元の行列を作るためにはこのように配列が要素になっている配列をカンマで区切ります。
vec2 = np.array([[1,2,3],[4,5,6]]) print(vec2)
実行結果
[[1 2 3] [4 5 6]]
基本的な行列の作り方はこのようになります。
また、この章で解説したimportの方法について、もう少し詳しく知りたい方はこちらの記事をご覧ください。
行列の計算
ここからは、先程作った行列を計算してみましょう。
機械学習でも、行列の計算は必須となる技術になります。
今回はこちらのサンプルコード(行列)を例に計算をしてみます。
vecx = np.array([[1,2,3],[4,5,6]]) vecy = np.array([[4,5,6],[7,8,9]]) vecz = np.array([[1,2,3],[7,8,9],[4,5,6]])
行列の足し算や引き算はとても直感的に実行することが出来ます。
print(vecx + vecy) print(vecx - vecy)
実行結果
array([[ 5, 7, 9], [11, 13, 15]]) array([[-3, -3, -3], [-3, -3, -3]])
行列の掛け算は、np.dot関数で実行することが出来ます。
res = np.dot(vecx, vecz) print(res)
実行結果
array([[27, 33, 39], [63, 78, 93]])
とても簡単に計算することが出来ましたね。
numpyの基本的な関数
最後に、numpyで使われる基本的な関数について見ていきましょう。
四則計算(np.add、np.subtract、np.multiply、np.divide)
まずは基本的な四則計算について見てみましょう。
こちらのサンプルコードを見てみましょう。
res1 = np.add(10,100) res2 = np.subtract(10,100) res3 = np.multiply(10,100) res4 = np.divide(100,10) print( res1, res2, res3, res4, )
実行結果
110 -90 1000 10.0
とても簡単ですね。
これらの四則計算のうち、np.add関数とnp.subtract関数は行列に対しても適用できます。
累乗、平方根(np.power、np.sqrt)
つぎは累乗、平方根について見てみましょう。
こちらのサンプルコードをご覧ください。
res1 = np.power(2,5) res2 = np.sqrt(2) res3 = np.sqrt(4) print( res1, res2, res3, )
実行結果
32 1.4142135623730951 2.0
順番に、2の5乗、2の平方根、4の平方根が表示されましたね。
三角関数(np.sin、np.cos、np.tan)
numpyではもちろん、三角関数も使うことが出来ます。
こちらのサンプルコードを見てみましょう。
res1 = np.sin(0) res2 = np.cos(0) res3 = np.tan(0) print( res1, res2, res3, )
実行結果
0.0 1.0 0.0
cosでは、cos0の値は1なので、しっかりと表示されていますね。
ソート関数(np.sort)
numpyではソート関数を使うことも出来ます。
ソートとは、順番がバラバラなものをある順番に沿って並び替えることです。
こちらのサンプルコードを見てみましょう。
x = np.random.randint(0, 10, size=10) print(x) print(np.sort(x))
実行結果
[6 2 2 9 7 1 5 8 5 4] [1 2 2 4 5 5 6 7 8 9]
このように、np.sort関数を使うと昇順に並び替えることが出来ます。
これを逆順の降順に並び替えるには、スライスというPythonの機能を使いましょう。
x = np.random.randint(0, 10, size=10) print(x) print(np.sort(x)[::-1])
実行結果
[6 2 2 9 7 1 5 8 5 4] [9 8 7 6 5 5 4 2 2 1]
このスライスは、リストなどのシーケンスの要素について、部分的に操作を行うことができる命令です。
基本的には、
x[始まり: 終わり: スライスのステップ]
で、順番を並び替えたり取得する位置を変えたりすることが出来ます。
今回の「[::-1]」では、スライスのステップを-1に指定したことで、逆順(降順)に取得することが出来ました。
まとめ
この記事ではnumpyについて、基礎的な部分を中心に紹介してきました。
numpyは一つの記事では書ききれないほど、たくさんの便利な機能があります。
この記事では導入部分の紹介が主でしたが、実際に使いながら使いたい機能を検索してみると良いかもしれません。
numpyを使って学術計算をより便利に実行してみましょう!
なお、今Pythonを学習している方は以下の記事もどうぞ。
はじめてPythonを使う方でもわかりやすいように、Pythonでできることやその学習法などを中心にまとめています。
復習にも使えると思いますので、ぜひ一度ご覧になってみてくださいね。
【Python 入門完全攻略ガイド】