2.6. Python スクリプトの階層構造¶
Python はオブジェクト指向の言語であり、いくつかの階層構造があります。
例えば、NumPy などのライブラリは、「パッケージ」と呼ばれる大きなコード群として提供されています。
また各パッケージには、「モジュール」と呼ばれる小さなコード群が複数含まれることが多くなっています。
例えば、NumPy の線形代数機能は linalg
という名前のモジュールで提供されています。
さらに、各モジュールには「クラス」が定義されていることがあり、 その中に変数や関数(クラスに付属する関数はメソッドと呼ばれる)が含まれています。
クラスは、オブジェクト指向プログラミングに必要な重要な概念ですが、 発展的な内容を含むため、ここでは深くは紹介しません。 ただし多くのライブラリで用いられることが多いため、その使用法だけを簡単に紹介します。
2.6.1. パッケージ内・モジュール内へのアクセス¶
これまでNumPyの sin
関数を実行する際、np.sin()
を実行しました。
これは、NumPy パッケージ内に定義されている sin 関数を呼び出すための記法です。
ここで「.」は、1つ下の階層への移動を意味するもので、この例の場合
「パッケージ名.関数名」
という形式でアクセスしていることになります。
同様に、NumPy パッケージ内の fft モジュール内の 実数に対する高速フーリエ変換
rfft を実行するためには np.fft.rfft
というように
「パッケージ名.モジュール名.関数名」
と言う形式でアクセスする必要があります。
2.6.2. クラスの使い方 np.ndarray¶
クラスはオブジェクト指向の重要な概念です。
その定義を説明する前に、ここではまずその一例である np.ndarray
を紹介します。
In [1]: x = np.linspace(0,1.1,12)
In [2]: x
Out[2]:
array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ,
1.1])
ここで、 x
は12個の要素からなる1次元ベクトルです。
言葉の定義を少し明確にしておきましょう。
「クラス」は型名のことであり、ここで x
のクラスは np.ndarray
です。
一方、 x
は np.ndarray
型を持つ変数です。
オブジェクト指向の言語ではこの変数のことを「オブジェクト」や「インスタンス」と呼びます。
各オブジェクトは、内部に変数や関数などの別のオブジェクトを有していることが多々有ります。
例えば np.ndarray
のオブジェクトは、
アレイの大きさや次元数などを別のオブジェクトとして有しています。
In [3]: x.shape # x の形状
Out[3]: (12,)
In [4]: x.ndim # x の次元数