2.3. 外部パッケージの使用¶
前節でも述べたように、多様なパッケージ(いくつかの機能をまとめたライブラリ)が 豊富に開発されていることがPythonの大きな特徴の1つです。
実際には生のPythonだけで用いることは少なく、基本的な数値計算機能を提供する NumPy [2] や グラフ描画ライブラリである Matplotlib [3] を始めとして外部パッケージを多用することになると思います。
[2] | NumPy, NumPy developers, http://www.NumPy.org/ |
[3] | Matplotlib, John Hunter, Darren Dale, Eric Firing, Michael Droettboom and the Matplotlib development team, https://matplotlib.org/ |
2.3.1. NumPy を利用する¶
NumPy や Matplotlib はデータ解析における最も基本的なパッケージです。 前節の方法に従って Anaconda をインストールした環境では、 これらは既にインストールされているので、すぐに使い始めることができます。
こういったパッケージを 各自で開発するスクリプトで用いるためには、 以下のような import 文によりその使用を宣言する必要があります。
In [1]: import numpy as np
ここで import numpy as np
は、「NumPy パッケージを np
という名前で用いる」
という宣言です。
なお、 as
の後ろの名前はユーザが勝手に決めてよいものですが、
混乱を避けるため、広く用いられている略称を用いることが望ましいでしょう。
NumPy の場合、 np
が正式な略称です。
このようにしてインポートした後は、その機能を np.***
という形で用いることになります。
NumPy の代表的な関数¶
NumPy を用いることで、多くの種類の算術演算を行うことができます。 例えば sin 関数は以下のようにして用います。
In [2]: x = np.sin(0.5 * np.pi)
In [3]: x
Out[3]: 1.0
NumPy では非常に多くの種類の関数やクラスが用意されています。 そのためどのような関数が用意されているかを把握することも難しく、 それらの使用法をすべて暗記することはほとんど不可能でしょう。
Python などのオープンソースソフトウェアでは、 開発に際して、使用法などの文書を同時に残していく文化が形成されており、 ユーザがある関数の使い方を知りたいと思った場合もすぐにその情報にアクセスできるようになっています。
Jupyter-notebook では、以下のように np.
まで記入してから Tab を押下すると、
np.
内にある関数一覧が表示されるほか、np.s
まで記入してから Tab を押下すると
それに合う候補を表示してくれます。
また、使用法がわからない関数でも、カーソルが括弧内にあるときに
Shift + Tab を押下することで、
それぞれの関数の使い方に関する文書(docstringsと言う)を表示させることができます。
これらを読むことで、新しい関数でもその使い方をすぐに理解することができるでしょう。
さらに、科学技術用途以外も含め Python は広く用いられている汎用言語なので、 インターネットで検索するだけでも多くの情報を見つけることができるのも特徴です。
多次元配列型 np.ndarray¶
NumPy は、多次元配列用のクラス(クラスについては後で少し紹介します)である np.ndarray
を提供しています。
(なお、“nd” array は、n-dimensional の略です)。
np.ndarray
は配列の大きさを後から変更できない、
全ての要素の型が同一なものに限られる、という点はリストと異なりますが、
同様にインデクシング・スライシングに対応しています。
np.ndarray
は、多次元配列の基礎となるクラスで、
線形演算を含む多くのNumPy関数で利用される他、
pandas など他のライブラリでも広く利用されている基本的なオブジェクト形式となっています。
詳しくは3章で紹介しますが、ここではその利用法について簡単にだけ触れることにします。
np.ndarray
を定義するためには、np.ndarray
から用意するか、
np.ones
や np.linspace
などの関数を用いることになります。
# [5 x 3 x 2] の大きさの配列をxとして確保する。
In [4]: x = np.ndarray((5, 3, 2))
# [2 x 3] の大きさで、要素がすべて1のint型の配列をyとして確保する。
In [5]: y = np.ones((2, 3), dtype=int)
In [6]: y
Out[6]:
array([[1, 1, 1],
[1, 1, 1]])
np.ndarray
とスカラー、np.ndarray
同士の計算は、要素ごとの計算として定義されています。
(broadcast)と呼ばれています。
In [7]: y * 3
Out[7]:
array([[3, 3, 3],
[3, 3, 3]])
In [8]: y + y