はじめに
NumPyは、ベクトルや行列計算を高速で行うためのライブラリです。
ここでは、NumPyでよく使うメソッドなどについて解説します。
Python3系の使用を想定しています。
インポート
NumPyを使うには、まずライブラリを読み込む必要があります。
慣習的に、np
とすることが多いです。
NumPy_1.py
import numpy as np
1次元配列
NumPyでは、リストのような配列を作ることができます。
NumPy_2.py
import numpy as np
np_arr_1 = np.array([1, 2, 5])
print(np_arr_1)
print(type(np_arr_1)) # ndarrayクラス
print(np_arr_1**2) # 各要素を2乗する。
np_arr_2 = np.array([3, 5, 7])
print(np_arr_1 + np_arr_2) # 要素ごとに足し算する。
np_arr_3 = np.arange(10)
print(np_arr_3)
np_arr_3[0:2] = 100
print(np_arr_3)
NumPyは要素同士の計算が簡単にできるのが特徴です。
NumPyを使わずに上記の処理を行おうとすると以下のようになります。
NumPy_3.py
arr_1 = [1, 2, 5]
for i, num in enumerate(arr_1):
arr_1[i] = num ** 2
print(arr_1)
NumPyの配列では、代入先の要素の値を更新すると、元の配列の値も更新されるので、注意が必要です。
元の配列が更新されないようにするには、copy()
メソッドを使用します。
NumPy_4.py
import numpy as np
np_arr_1 = np.array([1, 2, 5])
np_arr_2 = np_arr_1
np_arr_2[1] = 100
print(np_arr_1) # np_arr_1も変更されている。
print(np_arr_2)
np_arr_1 = np.array([1, 2, 5])
np_arr_2 = np_arr_1.copy()
np_arr_2[1] = 100
print(np_arr_1) # np_arr_1は変更されない。
print(np_arr_2)
ある条件を満たす要素のみを取り出すことも可能です。
NumPy_5.py
import numpy as np
np_arr_1 = np.array([1, 2, 5])
print(np_arr_1[np_arr_1 % 2 == 1]) # 奇数の要素のみを取り出す。
NumPyでは「ユニバーサル関数」と呼ばれる、配列の各要素に対する演算結果を返す関数が用意されています。
NumPy_6.py
import numpy as np
np_arr_4 = np.array([-1, 2, -3])
print(np.abs(np_arr_4)) # 各要素の絶対値
np_arr_5 = np.array([1, 9, 25])
print(np.sqrt(np_arr_5)) # 各要素の平方根
NumPyでは、乱数を発生させることもできます。
NumPy_7.py
import numpy as np
np_arr_6 = np.random.randint(0, 10, 5) # 0から9の間の整数をランダムに5個発生させる。
print(np_arr_6)
np_arr_7 = np.random.randint(5) # 0から4までの整数をランダムに1個発生させる。
print(np_arr_7)
import
の部分を書き換えることで、より短く簡単に記述することができます。
Numpy_8.py
from numpy.random import randint
np_arr_6 = randint(0, 10, 5)
print(np_arr_6)
np_arr_7 = randint(5)
print(np_arr_7)
2次元配列
2次元配列に関するメソッドは以下のようになります。
NumPy_9.py
import numpy as np
np_arr_8 = np.array([[1, 2, 3], [4, 5, 6]])
print(np_arr_8)
print(np_arr_8[1])
print(np_arr_8[1, 1])
print(np_arr_8.sum())
print(np_arr_8.sum(axis=0)) # 列ごとに計算
print(np_arr_8.sum(axis=1)) # 行ごとに計算
print(np_arr_8.shape)
print(np_arr_8.reshape(3, 2))
print(np_arr_8.T)
print(np.transpose(np_arr_8))
print(np_arr_8.mean()) # 平均
print(np.average(np_arr_8)) # 平均
print(np.max(np_arr_8)) # 最大値
print(np.min(np_arr_8)) # 最小値
print(np.std(np_arr_8)) # 標準偏差
print(np.var(np_arr_8)) # 分散
print(np.argmax(np_arr_8)) # 最大値の要素のインデックス番号
print(np.argmin(np_arr_8)) # 最小値の要素のインデックス番号
まとめ
ここでは、NumPyでよく用いられるメソッドなどを紹介してきました。
マスターするには、実際に使ってみるのが一番の近道です。