NumPy
数学関数
統計関数
配列操作
NumPy
機械学習や人工知能、データサイエンスなどの分野で Python が活用される理由の一つとして、NumPy (Numerical Python) の存在があります。NumPy は N 次元配列オブジェクト (ndarray : n-dimensional array) をベースに、大規模な演算を高速処理する科学技術用パッケージです。NumPy の ndarray は Python 本体に組み込まれているリストに似ていますが、扱う要素を数値に限定することで演算の高速化を実現させています。
NumPy およびその拡張パッケージである SciPy には、この ndarray を操作するための高品質な数学関数が揃えられています。NumPy のユーザーは数値計算の専門家となる必要はありません。実際のところ、ごく簡単な数値積分でさえ、あらゆる状況に対応できる汎用性を備えたプログラムの構築には神経をすり減らします。NumPy を活用すれば、自身で複雑な計算プログラムを組むことなく、状況に応じて必要な関数をインポートしながらコードを記述するだけで、高水準のモジュールやパッケージを作成することができます。
NumPyのバージョンを確認する方法
現在の環境にインストールされている NumPy のバージョンは numpy.__version__ で確認できます。
# インストールされているNumPyのバージョンを表示
print(np.__version__)
1.16.5
あるいは numpy.version.version を使います。
# インストールされているNumPyのバージョンを表示
print(np.version.version)
1.16.5
N 次元配列オブジェクト (ndarray)
numpy.array() に数値のリストを渡すと N 次元配列オブジェクトが生成されます。1 次元配列を作成して type() でクラスを調べてみましょう。
# NDARRAY-1
# NumPyをインポート
import numpy as np
# リスト[1,2,3]を渡して1次元配列を作成
arr = np.array([1, 2, 3])
print(arr)
print(type(arr))
[1 2 3] <class 'numpy.ndarray'>
[1 2 3] という 1 次元配列が表示されました。クラス名は numpy.ndarray です。リストとは異なり、各要素を区切る "," がありません。次は 2 次元配列を定義してみます。
# NDARRAY-2
# 2次元配列を作成
arr = np.array([[1, 2, 3],
[4, 5, 6]])
print(arr)
[[1 2 3] [4 5 6]]
このように [] で二重に括ったデータを渡すと 2 次元配列が生成されます。同様に [] で 三重に括ったリストを渡すと 3 次元配列を定義できます。
配列の要素の参照
1 次元配列の要素にアクセスするときは
とします。Python本体のリストと同じく、要素の index は 0, 1, 2, ... と割り当てられています。
# NDARRAY-3
x = np.array([1, 2, 3])
# 2番目(インデックス1)の要素へのアクセス
print(x[1])
2
2 次元配列の要素にアクセスするときは
のように記述します。index_r は行番号、index_c は列番号です。たとえば、2 行目 3 列目の要素には ndarray[1, 2] でアクセスします。
# NDARRAY-4
# 2次元配列を作成
x = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 2行目の3列目の要素にアクセス
print(x[1, 2])
6
スライスによって複数の要素を取り出すこともできます。
# NDARRAY-5
# 2行目以降の2列目と3列目をスライス
print(x[1:, 1:3])
[[5 6] [8 9]]
配列の要素の変更
代入演算子を使ってアクセスした要素を書き換えることもできます。
# NDARRAY-6
# 2行目2列目の要素を0に変更
x[1, 1] = 0
print(x)
[[1 2 3] [4 0 6] [7 8 9]]