3.Python基本ライブラリー数学演算Numpyとグラフ化matplotlib
Python基本ライブラリー数学演算NumPyとグラフ化matplotlib
Pythonで機械学習やディープラーニングなどを行う際に用いられるライブラリーで有名なのが「NumPy」モジュール。
NumPyは多次元配列演算を多用するベクトルや行列の演算を行うのに便利なライブラリーで、高速かつ効率的に数値計算を行うことができる。さらにPythonでグラフ化に便利なライブラリーがmatplotlibモジュールである。
ここではNumPyとmatplotlibの基本的な使用方法について紹介する。
Python数値演算ライブラリーNumPy
NumPyは機械学習やディープラーニングを行う際に使われる拡張ライブラリーで、配列演算を多用するベクトルや行列といった数学的対象を処理するのに便利なライブラリーである。基本的な計算処理であればNumPyを使わずに出来るが、大量のデータを処理するような場合には処理が遅くなるため、高速な数値計算が必要な場合にはNumPyを使うことが多い。
NumPyライブラリーはimport文にて組み込んで使用する。

ここではNumPyを使用して、基本的な配列へのread/write方法について説明する。
CやC++などでは配列に数値をread/writeするためにはfor-loop文で1データ毎に配列に書き込んで行く。
リスト1にサイン波の時間データと値を100データ分X=[ n]とY=[ n]配列に書き込むプログラムを示す。
これがNumPyを使用するとリスト2に示す様に、for-loop文を使用せずに、たった1行で100データ分がX=[ ]またはY=[ ]配列に作成される。NumPy使用によりプログラムの可読性が高まる。
x=np.linspace(0,2*np.pi,100)は0~2π(ラジアン)の間を100等分したデータ生成を示している。
linspaceの替わりに、arange(start,stop,step)を使用すると、startとstopの間をstep間隔でデータ生成できる。
y=np.sin(x)では、100個のx配列データそれぞれでのsin(x)を計算してy配列に書き込んでいる。
リスト1 For文で計算した結果を配列に順番に格納
import numpy as np
import matplotlib.pyplot as plt
x=[] #配列のアレイを指定
y=[]
for i in range(100):
xresult=i*2*np.pi/100
yresult=np.sin(xresult)
x.append(xresult) # X軸配列にデータ格納
y.append(yresult) # Y軸配列にデータ格納
plt.plot(x,y)
plt.show()
リスト2 Numpyでは1行で配列すべてを計算して格納
import matplotlib.pyplot as plt
x=np.linspace(0,2*np.pi,100)
y=np.sin(x)
plt.plot(x,y)
plt.show()
NumPy配列への要素追加、削除方法
配列L=[1,2,3,4]に要素を追加したいときはappendを使用する。また削除する場合はdelを使用する。

配列アレイのコピーと要素値を変更(書き換え)したいときは、以下の方法による。
F2 = F.copy() # 配列Fをコピー
F[0] = 0.0 # 指定配列要素値のみを書き換え
F2[(freq > fc)] = 0 # freq>fcの要素をすべて0に書き換え
Pythonグラフ化ライブラリーmatplotlib
Pythonでmatplotlibライブラリーを使用すると、簡単にデータをグラフ化できる。もっとも簡単な使い方の例は、リスト3によりグラフ化した図1である。グラフ化は2行のコマンドだけでOKである。
リスト3 サイン波生成とグラフ表示スケッチ
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(0,2*np.pi,100)
y=np.sin(x)
plt.plot(x,y)
plt.show()
図1 matplotlibによるグラフ表示

matplotlibの詳細設定方法
matplotlib では2通りの書式があるが、初心者には左下のplt.plot書式がわかりやすい。慣れてくると右下のオブジェクト指向(OO)書式がより詳細に設定ができる。
https://y373.sakura.ne.jp/data/sice_visit_study2020/part1.pdf

オブジェクト指向書式記述例を以下に示す。

matplotlib詳細設定コマンド
- 別々に文字サイズを指定各グラフ要素はplt.xlabel(“xlabel”, fontsize=18)にように、キーワード引数fontsizeに数値を与えることで、その数値の文字サイズとなる。なおデフォルトの文字サイズは12である。
ただし、目盛りの文字サイズの場合は、plt.tick_params(labelsize=18) と指定する。
- まとめて文字サイズを指定plt.rcParams[“font.size”] = 18で、全てのグラフ要素の文字サイズをまとめて変更することができる。
なお、デフォルトの文字サイズは12である。
- グラフ位置の調整各グラフ要素の文字サイズを大きくした副作用でグラフの一部が出力画像からはみ出てしまうことがある。
そこで、plt.tight_layout() を加えることで、グラフの位置やサイズが自動で調整されて、出力画像からのはみ出しを抑えることができる。
- グラフサイズの変更デフォルトのグラフサイズは6.4 x 4.8インチだが、plt.figure(figsize=(12.8,9.6)) でサイズを変更できる。
この例では縦横が2倍の大きさ12.8X9.6インチに設定される。
- 線の太さを変更線の太さを変更するには、plt.plot()の中に、linewidth=Xを入れる。linewidthは省略形で lw でもOK。
plt.plot(x1_value, y1_value, linewidth=5, label="test1")
plt.plot(x2_value, y2_value, lw=10, label="test2")
- 色の指定色を指定したい場合は、plt.plot()にcolor=”色”を用いる。
plt.plot(x1_value, y1_value, color="red", linewidth=5, label="test1")
plt.plot(x2_value, y2_value, color="blue", lw=10, label="test2")
- 波形表示範囲の指定グラフ上でのX軸、Y軸表示範囲は以下にて設定できる。
plt.xlim(4,8)
plt.ylim(-0.5,2.5)
- matplotlibの設定例(色、フォントサイズ、線幅などを個別指定)matplotlibで色、フォントサイズ、線幅などを個別指定したスケッチ例をリスト4に、グラフ化出力例を図2に示す。
リスト4
from matplotlib import pyplot as plt
y1_value = [1, 2, 4, 8, 16, 32, 64, 128, 256, 1028]
x1_value = range(1, len(y_value)+1)
y2_value = [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000]
x2_value = range(1, len(y2_value)+1)
fig=plt.figure(figsize=(10,6)) #グラフサイズ指定
plt.plot(x1_value, y1_value, color="red", linewidth=5, label="test1") #色指定、線幅指定
plt.plot(x2_value, y2_value, color="blue", lw=10, label="test2") #色指定、線幅指定
plt.title("Test Graph", {"fontsize": 20}) #タイトルのフォントサイズ指定
plt.xlabel("Numbers", {"fontsize": 20}) #X軸ラベルのフォントサイズ指定
plt.ylabel("Value", {"fontsize": 20}) #Y軸ラベルのフォントサイズ指定
plt.tick_params(labelsize=20) #目盛ラベルのフォントサイズ指定
plt.legend(prop={"size": 20}, loc="best") #凡例ラベルのフォントサイズ指定
plt.grid()
plt.show()

図2 色、フォントサイズ、線幅などを個別指定したグラフ化出力