np.reshapeとは?NumPy配列の形を変更する方法を初心者向けに解説
np.reshapeは、PythonのNumPyで配列の形(shape)を変更するための関数です。
例えば、6個の要素を持つ1次元配列を、2行3列の2次元配列に変更できます。
import numpy as np
a = np.array([1, 2, 3, 4, 5, 6])
b = np.reshape(a, (2, 3))
print(b)
実行結果は次のようになります。
[[1 2 3]
[4 5 6]]
np.reshapeは、配列の要素そのものを変更するのではなく、配列の形を変更すると考えると分かりやすいでしょう。NumPy公式ドキュメントでも、データを変更せずに配列のshapeを変更する関数として説明されています。 :contentReference[oaicite:0]{index=0}
np.reshapeの基本的な使い方
基本的な構文は次のとおりです。
np.reshape(a, shape)
aには形を変更したい配列、shapeには変更後の形を指定します。
1次元配列を2次元配列にする
import numpy as np
a = np.array([1, 2, 3, 4, 5, 6])
b = np.reshape(a, (2, 3))
print(b)
実行結果:
[[1 2 3]
[4 5 6]]
もともとは6個の要素を持つ1次元配列でしたが、(2, 3)を指定することで、2行3列の配列になりました。
np.reshapeでは要素数を合わせる
reshapeを使うときに最も重要なのが、変更前と変更後で要素数を一致させることです。
例えば、6個の要素を持つ配列なら、次のような形に変更できます。
import numpy as np
a = np.array([1, 2, 3, 4, 5, 6])
print(np.reshape(a, (2, 3)))
print(np.reshape(a, (3, 2)))
print(np.reshape(a, (6, 1)))
それぞれ要素数は6個です。
- 2 × 3 = 6
- 3 × 2 = 6
- 6 × 1 = 6
一方、次のような指定はできません。
import numpy as np
a = np.array([1, 2, 3, 4, 5, 6])
b = np.reshape(a, (2, 2))
2×2では要素数が4個になってしまうため、エラーになります。
つまり、reshapeでは「変更前の要素数=変更後の要素数」というルールを覚えておきましょう。NumPy公式でも、新しいshapeは元の配列と互換性が必要とされています。 :contentReference[oaicite:1]{index=1}
np.reshapeで-1を使う
np.reshapeでは、shapeの一部に-1を指定できます。
-1を指定すると、NumPyが残りの要素数から適切なサイズを自動計算してくれます。
import numpy as np
a = np.array([1, 2, 3, 4, 5, 6])
b = np.reshape(a, (2, -1))
print(b)
実行結果:
[[1 2 3]
[4 5 6]]
全体の要素数は6個です。1つ目の次元を2と指定しているので、もう一方は3だとNumPyが判断します。
(2, -1)は、実質的に(2, 3)と同じ結果になります。
-1を使って3行にする
import numpy as np
a = np.arange(12)
b = np.reshape(a, (3, -1))
print(b)
実行結果:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
12個の要素を3行にするので、列数は4になります。
NumPyではshapeの1つの次元だけに-1を指定でき、その値は要素数などから自動的に推測されます。 :contentReference[oaicite:2]{index=2}
np.reshapeで2次元配列を変更する
すでに2次元になっている配列の形を変更することもできます。
import numpy as np
a = np.array([
[1, 2, 3],
[4, 5, 6]
])
print(np.reshape(a, (3, 2)))
実行結果:
[[1 2]
[3 4]
[5 6]]
元の配列は2行3列ですが、(3, 2)を指定することで3行2列に変更しています。
np.reshapeで3次元配列にする
reshapeは2次元だけでなく、3次元以上の配列にも利用できます。
import numpy as np
a = np.arange(12)
b = np.reshape(a, (2, 2, 3))
print(b)
実行結果:
[[[ 0 1 2]
[ 3 4 5]]
[[ 6 7 8]
[ 9 10 11]]]
(2, 2, 3)なので、要素数は次のようになります。
2 × 2 × 3 = 12
元の配列も12個の要素を持っているため、reshapeできます。
np.reshapeとshapeの違い
NumPyでは、配列の形を確認するためにshapeを使います。
import numpy as np
a = np.arange(6)
print(a.shape)
実行結果:
(6,)
reshapeするとshapeが変わります。
b = np.reshape(a, (2, 3))
print(b.shape)
実行結果:
(2, 3)
つまり、shapeは現在の配列の形を確認するための属性、np.reshapeは配列の形を変更するための関数です。
np.reshapeとreshapeメソッドの違い
NumPyでは、次の2つの書き方があります。
np.reshape(a, (2, 3))
そして、次の書き方です。
a.reshape(2, 3)
どちらも配列のshapeを変更するために使えます。NumPy公式ドキュメントでも、ndarray.reshapeはnp.reshapeと同等のメソッドとして掲載されています。 :contentReference[oaicite:3]{index=3}
np.reshapeを使う
import numpy as np
a = np.arange(6)
b = np.reshape(a, (2, 3))
reshapeメソッドを使う
import numpy as np
a = np.arange(6)
b = a.reshape(2, 3)
PythonのNumPyコードでは、配列自身の形を変更する場合にはa.reshape()というメソッド形式もよく使われます。
np.reshapeのorderとは
np.reshapeには、要素をどのような順序で扱うかを指定するorderという引数があります。
np.reshape(a, shape, order='C')
代表的な指定は次の3つです。
C:C言語形式のインデックス順F:Fortran形式のインデックス順A:配列のメモリ配置に応じてCまたはFortran形式
通常のPython学習では、まずデフォルトのorder='C'を理解しておけば十分です。NumPy公式ドキュメントでは、orderは配列から要素を読み出す順序と、reshape後の配列へ配置する順序を指定するものと説明されています。 :contentReference[oaicite:4]{index=4}
order=’C’の例
import numpy as np
a = np.array([
[1, 2, 3],
[4, 5, 6]
])
b = np.reshape(a, (3, 2), order='C')
print(b)
実行結果:
[[1 2]
[3 4]
[5 6]]
order=’F’の例
import numpy as np
a = np.array([
[1, 2, 3],
[4, 5, 6]
])
b = np.reshape(a, (3, 2), order='F')
print(b)
実行結果:
[[1 4]
[2 5]
[3 6]]
order='F'では、要素を列方向に読み取るような結果になります。
np.reshapeとflattenの違い
np.reshapeとflattenは、どちらも配列の形を変える場面で登場しますが、目的が異なります。
| 機能 | 目的 |
|---|---|
| np.reshape | 指定したshapeに変更する |
| flatten | 1次元配列に変換する |
| ravel | 配列を1次元化する |
例えば、2行3列の配列を1次元にしたい場合は、次のようにできます。
import numpy as np
a = np.array([
[1, 2, 3],
[4, 5, 6]
])
b = a.reshape(-1)
print(b)
実行結果:
[1 2 3 4 5 6]
NumPyの公式入門でも、reshape()、flatten()、ravel()は配列の形状操作に関連する機能として説明されています。 :contentReference[oaicite:5]{index=5}
np.reshapeとresizeの違い
reshapeとresizeは名前が似ていますが、用途が異なります。
reshapeは基本的に要素数を変えずにshapeを変更するために使用します。
import numpy as np
a = np.arange(6)
b = a.reshape(2, 3)
print(b)
一方、resizeは配列のshapeだけでなく、要素数を変更することもできます。
そのため、単純に「配列の形を変えたい」という場合には、まずreshapeを検討するとよいでしょう。
np.reshapeでよくあるエラー
ValueError: cannot reshape array
reshapeでよくあるのが、要素数が合わないことによるValueErrorです。
import numpy as np
a = np.arange(6)
b = a.reshape(2, 2)
元の配列は6個の要素を持っていますが、(2, 2)では4個の要素しか入りません。
そのため、reshapeできません。
次のように指定すれば正常に動作します。
b = a.reshape(2, 3)
np.reshapeを使うときのポイント
- reshape前後の要素数を一致させる
- shapeはタプルで指定できる
-1を使うと1つの次元を自動計算できる- 2次元だけでなく3次元以上にもできる
a.reshape()というメソッド形式も利用できるorderで要素の並び方を指定できる
np.reshapeのまとめ
np.reshapeは、NumPy配列のshapeを変更するための基本的な関数です。
最も基本的な使い方は次のとおりです。
import numpy as np
a = np.array([1, 2, 3, 4, 5, 6])
b = np.reshape(a, (2, 3))
print(b)
実行結果:
[[1 2 3]
[4 5 6]]
特に重要なのは、reshape前後で要素数を合わせることです。
また、-1を使えば、残りの次元をNumPyに自動計算させることができます。
a.reshape(2, -1)
NumPyを使ったデータ分析、機械学習、AI開発では、配列のshapeを正しく扱うことが重要です。np.reshapeは、NumPyを学ぶならぜひ覚えておきたい基本関数の一つです。




