【なんぱい】

NumPy(ナンパイ) とは?

最終更新:
💡 Pythonの数値計算を支える「縁の下の力持ち」

Pythonで数値計算に使う基盤ライブラリ。多次元配列ndarrayや、配列の要素ごとの演算・行列演算などを提供し、科学計算やデータ分析に使われる。

📌 このページのポイント
同じ「* 2」でも意味が違う Pythonのリスト NumPyの配列 1 2 3 4 5 1 2 3 4 5 * 2 * 2 並びを2回繰り返す 各要素を2倍にする 1 2 3 4 5 1 2 3 4 5 2 4 6 8 10 ndarrayの行列積には @ などを使う
左は[1, 2, 3, 4, 5]というリスト、右は同じ数値を入れたndarray。配列の*は要素ごとの演算で、速さの倍率を比較した図ではありません。
ひよこ ひよこ
NumPyは何が便利なの?
ペンギン先生 ペンギン先生
多次元配列ndarrayと、配列に対する数値演算を提供するよ。例えばnp.array([1, 2, 3, 4, 5]) * 2なら、結果は[2, 4, 6, 8, 10]になる。Pythonのリストを2倍したときのように、同じ並びを繰り返す操作とは違うんだ。
ひよこ ひよこ
なんで速く計算できるの?
ペンギン先生 ペンギン先生
自分でPythonのループを書く代わりに、配列全体への演算を指定できるからだよ。配列演算をまとめて指定する書き方をvectorizationと呼び、内部ではコンパイルされた処理が反復計算する。ループ自体がなくなるわけではないし、処理やデータ量によって速度は変わるんだ。
ひよこ ひよこ
配列の大きさが違っても計算できる?
ペンギン先生 ペンギン先生
broadcastingの規則に合えばできるよ。配列の形状を末尾の次元から比べ、長さが同じか、どちらかが1なら対応できる。例えば配列に数値2を掛ける操作もその一つ。形状が合わない演算はエラーになるので、shapeを確認しよう。
ひよこ ひよこ
掛け算は全部、行列の掛け算になる?
ペンギン先生 ペンギン先生
ndarrayの*は要素ごとの掛け算だよ。2次元配列の行列積には@などを使う。演算の前にはshapeとdtypeを見て、配列の形状とデータ型が意図どおりか確認しよう。記号が同じでも、リストとは意味が違うんだ。
ひよこ ひよこ
共有参照とコピーはどう違うの?
ペンギン先生 ペンギン先生
基本的なスライスは元のデータを共有するview(共有参照)になるよ。例えばa[1:3]を変更すると、元のaの対応する値も変わる。独立したデータが必要なら.copy()でコピーする。整数の配列などを使った高度な索引はコピーになるので、取得方法の違いも確かめよう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「NumPy」って出てきたら「Pythonで配列を使った数値計算をする基盤ライブラリ」と思えばだいたいOK!
📖 おまけ:英語の意味
「NumPy(Numerical Python)」 = 数値計算のためのPython
💬 Numericalは「数値の」。Pythonで数値計算を高速に行うためのライブラリだよ

参考資料

← 用語集にもどる