カテゴリ: 次元追加・削除(expand_dims・squeeze) 更新日: 2026/08/06

NumPyで2次元配列を3次元配列へ変換する方法を完全解説 expand_dimsとreshapeの使い方を初心者向けに理解

3123
NumPyで2次元配列を3次元配列へ変換する方法【expand_dims・reshape】

先生と生徒の会話形式で理解しよう

生徒

「PythonのNumPyで2次元配列を3次元配列に変換する方法ってありますか?」

先生

「はいあります。expand_dimsやreshapeを使うことで簡単に次元を増やすことができます。」

生徒

「2次元から3次元にする意味って何ですか?」

先生

「機械学習や画像処理ではデータの形がとても重要です。次元を増やすことで扱えるデータの種類が広がります。」

生徒

「なるほど。具体的な方法を知りたいです。」

先生

「それではNumPyで2次元配列を3次元配列へ変換する方法を順番に見ていきましょう。」

1. 2次元配列と3次元配列の違い

1. 2次元配列と3次元配列の違い
1. 2次元配列と3次元配列の違い

NumPyにおける配列は次元数によって扱い方が変わります。2次元配列は行と列で構成される表のようなデータですが、3次元配列はさらに奥行きを持つ構造になります。

例えば表データは2次元配列で表現されますが、画像データや複数のデータをまとめて扱う場合には3次元配列が必要になります。この違いを理解することが、次元操作の第一歩です。

2. expand_dimsで次元を追加する方法

2. expand_dimsで次元を追加する方法
2. expand_dimsで次元を追加する方法

expand_dimsは既存の配列に新しい次元を追加するための関数です。指定した位置に新しい軸を追加することができます。


import numpy as np

arr = np.array([[1, 2], [3, 4]])

result = np.expand_dims(arr, axis=2)
print(result)

[[[1]
  [2]]

 [[3]
  [4]]]

このようにして、2次元配列を3次元配列に変換することができます。axisの位置によって追加される場所が変わる点に注意しましょう。

3. axisの違いによる変化

3. axisの違いによる変化
3. axisの違いによる変化

expand_dimsではaxisの値によって配列の形が大きく変わります。どこに次元を追加するかを理解することが重要です。


import numpy as np

arr = np.array([[1, 2], [3, 4]])

print(np.expand_dims(arr, axis=0).shape)
print(np.expand_dims(arr, axis=1).shape)
print(np.expand_dims(arr, axis=2).shape)

(1, 2, 2)
(2, 1, 2)
(2, 2, 1)

このように、axisの値によって追加される位置が変わるため、目的に応じて使い分けることが必要です。

4. reshapeで3次元配列へ変換する方法

4. reshapeで3次元配列へ変換する方法
4. reshapeで3次元配列へ変換する方法

reshapeを使うことで、配列の形を自由に変更することができます。2次元配列を3次元配列に変換することも可能です。


import numpy as np

arr = np.array([[1, 2], [3, 4]])

result = arr.reshape(2, 2, 1)
print(result)

[[[1]
  [2]]

 [[3]
  [4]]]

reshapeは配列の要素数を保ったまま形を変えるため、指定するサイズに注意する必要があります。

5. expand_dimsとreshapeの違い

5. expand_dimsとreshapeの違い
5. expand_dimsとreshapeの違い

expand_dimsとreshapeはどちらも次元を扱う機能ですが、役割が異なります。expand_dimsは新しい次元を追加するための機能であり、reshapeは配列の形を変更するための機能です。

同じ結果になる場合もありますが、意図が異なるため、適切に使い分けることが重要です。特に可読性を重視する場合にはexpand_dimsを使う方が分かりやすい場合があります。

6. 実務での活用例

6. 実務での活用例
6. 実務での活用例

実務では、機械学習モデルに入力するデータの形を整える際に、2次元配列を3次元配列に変換することがよくあります。例えば画像データでは高さと幅に加えてチャネルの次元が必要になります。

また、複数のデータをまとめて処理する際にも、次元を追加することで一括処理が可能になります。こうした場面でexpand_dimsやreshapeは欠かせない機能です。

7. よくあるエラーと注意点

7. よくあるエラーと注意点
7. よくあるエラーと注意点

reshapeを使う場合は、要素数が一致していないとエラーになります。そのため、元の配列の要素数を確認することが重要です。

また、axisの指定ミスによって意図しない形になることもよくあります。配列のshapeを確認しながら操作することで、ミスを防ぐことができます。

8. squeezeで元に戻す方法

8. squeezeで元に戻す方法
8. squeezeで元に戻す方法

追加した次元はsqueezeを使うことで削除することができます。これにより、不要な次元を簡単に取り除くことができます。


import numpy as np

arr = np.array([[1, 2], [3, 4]])

expanded = np.expand_dims(arr, axis=2)
print(expanded.shape)

squeezed = np.squeeze(expanded)
print(squeezed.shape)

(2, 2, 1)
(2, 2)

このように、追加と削除を組み合わせることで、柔軟な配列操作が可能になります。

まとめ

まとめ
まとめ

NumPyで2次元配列を3次元配列へ変換する方法について、expand_dimsとreshapeを中心に理解を深めてきました。今回の内容では、単にコードを覚えるのではなく、配列の次元という考え方そのものをしっかり押さえることが重要であることが分かります。配列はデータの入れ物であり、その形によって処理の方法や結果が大きく変わるため、次元操作はデータ処理の基本中の基本といえます。

まず、2次元配列と3次元配列の違いを理解することが大切です。2次元配列は行と列で構成された表形式のデータですが、3次元配列はそこにさらに奥行きの情報が追加されます。この奥行きがあることで、複数のデータをまとめて扱ったり、画像のような複雑な情報を扱ったりすることができるようになります。特に機械学習や画像処理の分野では、この3次元配列の扱いが非常に重要になります。

次に、expand_dimsの役割について確認しました。この関数は既存の配列に新しい次元を追加するためのものであり、どの位置に次元を追加するかをaxisで指定することができます。axisの値によって配列の形が大きく変わるため、この部分の理解はとても重要です。例えばaxisをゼロにすると先頭に次元が追加され、axisを二にすると最後に次元が追加されるというように、位置によって結果が変わる点をしっかり覚えておきましょう。

一方でreshapeは配列の形そのものを変更するための機能です。要素数を保ったまま形を変えるため、指定するサイズが一致していないとエラーになります。expand_dimsと似た結果になることもありますが、役割は異なるため、どちらを使うべきかを意識することが重要です。特にコードの意図を分かりやすくするためには、次元を追加する場合はexpand_dimsを使う方が適しています。

また、実務での活用としては、データの前処理が代表的な場面になります。機械学習モデルは入力データの形に厳しいため、2次元配列のままでは扱えない場合があります。そのようなときに3次元配列へ変換することで、モデルに適した形に整えることができます。これにより、エラーを防ぎながら効率的に処理を進めることが可能になります。

さらに、squeezeを使うことで追加した次元を元に戻すこともできる点は非常に便利です。expand_dimsとsqueezeをセットで覚えることで、次元の追加と削除を自由にコントロールできるようになります。これにより、柔軟なデータ操作が可能になります。

初心者の方は、配列のshapeを確認しながら操作することを習慣にすることが大切です。見た目だけで判断するのではなく、数値としての形を理解することで、より確実に次元操作を身につけることができます。最初は難しく感じるかもしれませんが、繰り返し使うことで自然と理解できるようになります。

最後に、基本を確認するためのサンプルコードをもう一度見ておきましょう。これらの例を自分で動かして確認することで、理解がより深まります。

サンプルプログラムで復習


import numpy as np

arr = np.array([[1, 2], [3, 4]])

expanded = np.expand_dims(arr, axis=2)
print("expand_dims:", expanded.shape)

reshaped = arr.reshape(2, 2, 1)
print("reshape:", reshaped.shape)

expand_dims: (2, 2, 1)
reshape: (2, 2, 1)

import numpy as np

arr = np.array([[1, 2], [3, 4]])

expanded = np.expand_dims(arr, axis=0)
print(expanded.shape)

squeezed = np.squeeze(expanded)
print(squeezed.shape)

(1, 2, 2)
(2, 2)

このように、配列の形を意識しながら操作することで、次元の追加と削除の流れをしっかり理解することができます。NumPyの配列操作は最初は難しく感じるかもしれませんが、基本を押さえれば確実に使いこなせるようになります。

先生と生徒の振り返り会話

生徒

「2次元配列から3次元配列に変換するにはexpand_dimsやreshapeを使うんですね。」

先生

「その通りです。どちらも同じような結果になりますが、役割が違う点を理解することが大切です。」

生徒

「axisの位置で形が変わるのも重要なポイントだと感じました。」

先生

「良いところに気づきました。配列のshapeを確認する習慣をつけると理解が深まります。」

生徒

「squeezeで元に戻せるのも便利ですね。」

先生

「はい、追加と削除をセットで覚えると、より柔軟に配列を扱えるようになります。」

生徒

「これでNumPyの次元操作がかなり理解できました。実際に使って慣れていきます。」

先生

「その姿勢が大切です。繰り返し使うことで自然に身につきますよ。」

次元追加・削除(expand_dims・squeeze)の一覧へ
新着記事
Python
NumPyのスライスの使い方!範囲指定で配列を取り出す方法
NumPyのスライスの使い方!範囲指定で配列を取り出す方法
AWS
【AWS】CloudWatchで障害検知を自動化する設計パターン
【AWS】CloudWatchで障害検知を自動化する設計パターンを初心者向けに解説!AWS監視とアラート通知の基本
AWS
【AWS】RDSの無料枠とは?対象インスタンスタイプと注意点を解説
【AWS】RDSの無料枠とは?対象インスタンスタイプと注意点を解説
Flutter
Flutterの入力フォーム作成!TextField・TextFormFieldの基本
Flutterの入力フォーム作成!TextField・TextFormFieldの基本を初心者向けに解説
人気記事
Flutter
Flutterの開発に必要なもの!パソコン・ツール・OSなど準備まとめ
Flutterの開発に必要なもの!パソコン・ツール・OSなど準備まとめ
Java
Java の Random クラスを使ってランダムな数値を生成する方法
JavaのRandomクラスの使い方を完全ガイド!初心者でもわかる乱数生成
Java
Java の getter メソッドと setter メソッドの使い方
Javaのgetterメソッドとsetterメソッドの使い方を完全ガイド!初心者でもわかるアクセス方法
AWS
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説

🔌 USBポート不足を解消

Type-C 1本で拡張。
開発・作業環境を一気に快適に

UGREEN USB-Cハブを見る

※ Amazon広告リンク