ray88’s diary

お仕事で困ったとき用の自分用の覚書

Python Numpy

# NumPyの基本を完全マスター!配列操作からデータ処理まで総まとめ

## はじめに

NumPyは科学技術計算のための基本的なパッケージで、多次元配列オブジェクトや各種派生オブジェクトを提供します。本記事では、NumPyの基本的な機能から実践的な使い方までを解説します。

## 1. 基本的なインポートと配列作成

import numpy as np

# 1次元配列の作成
arr1 = np.array([1, 2, 3, 4, 5])

# 2次元配列の作成
arr2 = np.array([[1, 2, 3],
                 [4, 5, 6]])

# 特殊な配列の作成
zeros = np.zeros((3, 3))  # 0で埋めた配列
ones = np.ones((2, 4))    # 1で埋めた配列
rand = np.random.rand(3, 3)  # 0-1の乱数配列
arange = np.arange(0, 10, 2)  # 0から10まで2刻みの配列

## 2. 配列の基本プロパティ

```

プロパティ 説明 使用例
ndarray.shape 配列の形状 arr2.shape → (2, 3)
ndarray.dtype データ型 arr1.dtype → int64
ndarray.size 要素の総数 arr2.size → 6
ndarray.ndim 次元数 arr2.ndim → 2
ndarray.itemsize 各要素のバイトサイズ arr1.itemsize → 8
ndarray.nbytes 全要素の総バイトサイズ arr1.nbytes → 40

```

## 3. 基本的な操作とメソッド

```

カテゴリ メソッド/操作 説明 使用例
配列操作 reshape 配列の形状を変更 arr1.reshape(5,1)
配列操作 flatten 多次元配列を1次元に平坦化 arr2.flatten()
配列操作 transpose / T 転置 arr2.transpose() または arr2.T
配列操作 concatenate 配列の結合 np.concatenate([arr1, arr2])
数学関数 sum 合計を計算 arr1.sum()
数学関数 mean 平均を計算 arr1.mean()
数学関数 std 標準偏差を計算 arr1.std()
数学関数 min, max 最小値・最大値を取得 arr1.min(), arr1.max()
インデックス argmin, argmax 最小値・最大値のインデックスを取得 arr1.argmin(), arr1.argmax()
ソート sort 配列をソート np.sort(arr1)
ユニーク unique 重複を除いた要素を取得 np.unique(arr1)

```

## 4. インデックスとスライス

# 基本的なインデックス
arr2[0, 1]  # 1番目の行、2番目の列の要素

# スライス
arr2[0:2, 1:]  # 0-1行目、1列目以降

# ブール型インデックス
mask = arr1 > 3
arr1[mask]  # 3より大きい要素を取得

# 高度なインデックス
indices = [0, 2]
arr2[indices]  # 指定したインデックスの行を取得

## 5. 数学的な操作

```

カテゴリ 操作 説明 使用例
基本演算 +, -, *, / 要素ごとの演算 arr1 * 2
行列演算 dot 行列積 np.dot(arr1, arr2)
行列演算 matmul 行列積(@演算子 arr1 @ arr2
数学関数 exp 指数関数 np.exp(arr1)
数学関数 log 自然対数 np.log(arr1)
数学関数 sqrt 平方根 np.sqrt(arr1)
三角関数 sin, cos, tan 三角関数 np.sin(arr1)
集計 sum 合計 np.sum(arr1, axis=0)
集計 cumsum 累積和 np.cumsum(arr1)

```

## 6. ブロードキャスト

NumPyの重要な機能の1つがブロードキャストです。異なる形状の配列間で演算を行う際に、自動的に配列が拡張されます。

# ブロードキャストの例
arr = np.array([[1, 2, 3],
                [4, 5, 6]])
scalar = 2
result = arr * scalar  # 全要素に2を掛ける

# 異なる形状の配列との演算
arr1 = np.array([[1],
                 [2]])
arr2 = np.array([1, 2, 3])
result = arr1 + arr2  # arr1が自動的に拡張される

## 7. ファイル入出力

# 配列の保存
np.save('array.npy', arr1)  # バイナリ形式
np.savetxt('array.txt', arr1)  # テキスト形式

# 配列の読み込み
loaded_arr = np.load('array.npy')  # バイナリ形式
loaded_txt = np.loadtxt('array.txt')  # テキスト形式

## まとめ

NumPyは配列操作や数値計算において非常に強力なツールです。この記事で紹介した基本的な機能を押さえることで、データ分析や科学技術計算の基礎を固めることができます。

## 実践的なTips

```

目的 コード 説明
メモリ効率 arr.astype('float32') データ型を変更してメモリを節約
次元追加 np.expand_dims(arr, axis=0) 指定した軸に次元を追加
次元削除 np.squeeze(arr) サイズ1の次元を削除
配列の分割 np.split(arr, 3) 配列を指定数に分割
乱数シード np.random.seed(42) 乱数生成の再現性を確保

```

## 参考リンク

[NumPy公式ドキュメント](https://numpy.org/doc/stable/)