科学技術計算や機械学習、Webデータ分析などの分野では、大量の数値データを高速に処理する必要があります。Python標準のリスト型では処理速度や記述の面で限界があるため、NumPy(ナンパイ) というライブラリが事実上の標準として使われます。
ここでは、NumPyの導入方法と、その核となる「多次元配列(ndarray)」の基本的な作り方を解説します。
目次
1. インストールとインポート
NumPyは外部ライブラリのため、インストールが必要です。 慣例として np という別名を付けてインポートします。
インストール
pip install numpy
インポート
import numpy as np
2. NumPy配列(ndarray)の作成
NumPyでは np.array() 関数を使って、Pythonのリストから配列を作成します。 ユーザーの例にあるような「リストのリスト」を渡すと、自動的に「2次元配列(行列)」として認識されます。
実行可能なサンプルコード
import numpy as np
def numpy_basics_demo():
print("=== NumPy Array Creation ===")
# 1. 2次元配列の作成(ユーザー提示の例)
# リストの入れ子構造を渡します
source_list = [
[11, 12, 13],
[21, 22, 23],
[31, 32, 33]
]
# np.array() で ndarray オブジェクトに変換
x = np.array(source_list)
print(f"x:\n{x}")
# 2. 配列の重要属性(プロパティ)を確認
# データ分析では、まずこれらの情報を確認するのが基本です
print("\n[Array Attributes]")
print(f"Type: {type(x)}") # <class 'numpy.ndarray'>
print(f"Rank (ndim): {x.ndim}") # 次元の数(今回は2)
print(f"Shape: {x.shape}") # 各次元の要素数(3行3列なので (3, 3))
print(f"Size: {x.size}") # 全要素数(9)
print(f"Dtype: {x.dtype}") # データ型(例: int64)
# 3. NumPyならではの機能:要素への一括アクセス
# Pythonのリストではループが必要な処理も、NumPyなら一行で書けます
print("\n[Operations]")
# スライシング: [行範囲, 列範囲]
# 例: 全行の、インデックス1(2列目)を取得
col_2 = x[:, 1]
print(f"2nd column: {col_2}") # [12 22 32]
# ブロードキャスト計算
# 全要素に 100 を足す(ループ不要)
x_plus = x + 100
print(f"x + 100:\n{x_plus}")
if __name__ == "__main__":
numpy_basics_demo()
解説:Pythonリストとの違い
np.array は単なるリストではありません。最大の違いは 「メモリ効率」 と 「ベクトル演算」 です。
- 型が固定される: リストは数値や文字列を混在できますが、NumPy配列は「すべての要素が同じ型(
intやfloatなど)」である必要があります。これにより高速な計算が可能になります。 - 要素ごとの計算:
- リスト:
[1, 2] * 2→[1, 2, 1, 2](連結される) - NumPy:
np.array([1, 2]) * 2→[2, 4](各要素が計算される)
- リスト:
データ分析では、この性質を利用して行列計算を行います。
