【Python】Numpyの基本的な使い方まとめ

Numpyは、Pythonで数値計算を行うためのライブラリで、特に行列や多次元配列の操作が得意です。この記事では、Numpyを使って基本的な行列の操作方法を学び、実際のコード例とその出力を通して、Numpyの基本的な使い方を解説します。

## Numpyのインストール

まず、Numpyをインストールしていない場合は、以下のコマンドでインストールします。

```bash
pip install numpy
```

## Numpyの基本

### 1. Numpy配列の作成

Numpyの配列は、リストのようなものですが、数値計算に特化しています。まずは1次元配列と2次元配列（行列）を作成してみましょう。

```python
import numpy as np

# 1次元配列を作成
arr_1d = np.array([1, 2, 3, 4, 5])
print("1次元配列:", arr_1d)
```

#### 出力:
```
1次元配列: [1 2 3 4 5]
```

次に、2次元配列（行列）を作成します。

```python
# 2次元配列（行列）を作成
arr_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("2次元配列（行列）:")
print(arr_2d)
```

#### 出力:
```
2次元配列（行列）:
[[1 2 3]
 [4 5 6]
 [7 8 9]]
```

### 2. 配列の形状（shape）と次元（ndim）

配列の「形状（shape）」や「次元（ndim）」は、計算の際に重要な情報です。形状は配列のサイズを表し、次元は配列が何次元かを示します。

```python
# 配列の形状と次元を確認
print("配列の形状:", arr_2d.shape)  # (行数, 列数)
print("配列の次元:", arr_2d.ndim)   # 次元数
```

#### 出力:
```
配列の形状: (3, 3)
配列の次元: 2
```

### 3. 配列の要素へのアクセス

配列の特定の要素にアクセスする方法や、行や列を取り出す方法を紹介します。

```python
# 配列の特定の要素にアクセス
print("要素 (0, 1):", arr_2d[0, 1])  # 0行1列目の要素（2）
```

#### 出力:
```
要素 (0, 1): 2
```

行や列をスライスして取り出す方法です。

```python
# 1行目を取り出す
print("1行目:", arr_2d[0, :])

# 2列目を取り出す
print("2列目:", arr_2d[:, 1])
```

#### 出力:
```
1行目: [1 2 3]
2列目: [2 5 8]
```

### 4. 行列の演算

Numpyを使えば、行列の加算・減算、スカラー倍、転置、行列積などの演算を簡単に行えます。

#### 行列の加算・減算

```python
arr_2d_2 = np.array([[9, 8, 7], [6, 5, 4], [3, 2, 1]])

# 行列の加算
result_add = arr_2d + arr_2d_2
print("行列の加算:")
print(result_add)

# 行列の減算
result_sub = arr_2d - arr_2d_2
print("行列の減算:")
print(result_sub)
```

#### 出力:
```
行列の加算:
[[10 10 10]
 [10 10 10]
 [10 10 10]]

行列の減算:
[[-8 -6 -4]
 [-2  0  2]
 [ 4  6  8]]
```

#### 行列のスカラー倍

行列全体にスカラー（数値）を掛ける操作です。

```python
# 行列にスカラーを掛ける
result_scalar = arr_2d * 2
print("行列のスカラー倍:")
print(result_scalar)
```

#### 出力:
```
行列のスカラー倍:
[[ 2  4  6]
 [ 8 10 12]
 [14 16 18]]
```

#### 行列の転置

行列を転置するには、`.T`を使用します。

```python
# 行列の転置
result_transpose = arr_2d.T
print("行列の転置:")
print(result_transpose)
```

#### 出力:
```
行列の転置:
[[1 4 7]
 [2 5 8]
 [3 6 9]]
```

#### 行列積（ドット積）

行列の積を計算するには、`np.dot()` または `@` 演算子を使います。ここでは、`arr_2d` と `arr_2d_2` のドット積を求めてみます。

```python
# 行列積（ドット積）
result_dot = np.dot(arr_2d, arr_2d_2.T)  # arr_2dとarr_2d_2の転置行列のドット積
print("行列積:")
print(result_dot)
```

#### 出力:
```
行列積:
[[ 30  24  18]
 [ 84  69  54]
 [138 114  90]]
```

### 5. ランダムな行列の生成

Numpyは、ランダムな整数や浮動小数点数を使った行列の生成にも対応しています。

```python
# 3x3のランダムな整数行列を生成（0から10未満の整数）
random_int = np.random.randint(0, 10, size=(3, 3))
print("ランダム整数行列:")
print(random_int)

# 3x3のランダムな浮動小数点数行列を生成（0から1未満）
random_float = np.random.rand(3, 3)
print("ランダム浮動小数点数行列:")
print(random_float)
```

#### 出力（例）:
```
ランダム整数行列:
[[1 4 9]
 [7 6 2]
 [8 1 3]]

ランダム浮動小数点数行列:
[[0.79479299 0.29070783 0.16703066]
 [0.38478144 0.07808578 0.58624326]
 [0.47866349 0.19722409 0.05839242]]
```

### 6. 配列の演算（統計的な操作）

Numpyを使うと、配列の統計的な操作も簡単に行えます。例えば、平均値、標準偏差、合計値などです。

```python
# 配列の平均、標準偏差、合計
print("平均値:", np.mean(arr_2d))
print("標準偏差:", np.std(arr_2d))
print("合計値:", np.sum(arr_2d))
```

#### 出力:
```
平均値: 5.0
標準偏差: 2.581988897471611
合計値: 45
```

## まとめ

この記事では、Numpyの基本的な使い方を行列の操作を通じて学びました。Numpyを使うことで、行列計算や数値計算を非常に効率よく行えるようになります。特に、配列の生成、形状の操作、基本的な演算（加算、スカラー倍、行列積、転置など）は、データ解析や機械学習などで頻繁に使用される重要な技術です。

今後は、Numpyを用いたより高度な数値計算や、Pandas、Matplotlibといった他のライブラリとの組み合わせを試してみてください！