016 Pythonを使って動作検証用の測定データを作成する(その2)

2022/03/23

紹介/スクリプト

t f B! P L

前の投稿 015 Pythonを使って動作検証用の測定データを作成するで紹介したPythonスクリプトの説明を行います.

    $\sin\left(\pi t + \theta_{0}\right) + 2$
と,振幅1[V],位相30[deg],直流バイアス 2[V],時間は 5[s](2.5周期)の正弦波データを,10[ms]毎に合計501個生成するPythonスクリプトは,
    ts = np.linspace(0, 5, 501)
    xs = np.pi*ts + 30/180*np.pi
    ys = np.sin(xs) + 2
です.

まず,時間の数列tsは,numpyパッケージのlinspace関数を使って生成します.
linspace関数は,
    linspace(数列の最初の項, 最後の項, 数列の総数)
という引数を与え,numpy配列の数列データを生成します.

次の
    xs = np.pi*ts + 30/360*np.pi
の行は,正弦波データの角度に関する数列データ(numpy配列)を生成しています.
np.piは円周率で,30/360*np.piは,30[deg]を[rad]に変換しています.

ここで特徴的なのは,

  • numpy配列に定数(円周率np.pi)を掛け,定数(30/360*np.pi)を足すと,それが全ての項への演算として,新たなnumpy配列が生成されるということ
  • numpy配列xsは,前もって,np.zero関数やnp.empty関数で確保しなくて良いこと(この場合は,代入ではなく,xsを生成しているので,前もって確保しなくて良い)

ことです.

以前の投稿 007 numpy配列の使い方で,numpy配列を,
「配列の生成手順が異なるだけで,配列としての使い方は,Pythonリストと同じです.」
と紹介しましたが,実は,Pythonリストでは,上記のような処理はできません(定数を掛けると,定数分だけリストが長くコピーされますし,定数を加算しようとするとエラーとなります).

numpy配列は,上記のように,(配列でありながら)あたかも変数であるかのように記述することができます(C/C++やC#のように,ループを使って配列の処理を行わずに済むので,ノンプログラマーでも,とっつきやすいと思います)

最後の
    ys = np.sin(xs) + 2
の行も同じです.numpyパッケージが用意するsin関数は,numpy配列を引数として,全ての項のsinを算出して,numpy配列を生成します.さらに,全ての項に対して直流バイアス 2を加算した,最優的なnumpy配列ysが生成されます.

どうでしょう.numpyパッケージを使うことで,僅か3行で,しかも,非常に分かりやすい記述で,動作検証用の測定データを生成することができました.
C/C++やC#で同じ処理を行うには,少なくとも数十行は必要ですし,ノンプログラマーには分かりにくいプログラムコードとなると思います.

紹介が長くなったので,numpyパッケージと双璧をなす,matplotlibパッケージの紹介は,次の投稿にすることにします.



このブログを検索

自己紹介

C++やC#を使って数値解析プログラムの開発を長年行ってきました.
今は,Pythonを使った自動処理システムの開発をメインに行っています.

QooQ