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.reshapenp.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.reshapeflattenは、どちらも配列の形を変える場面で登場しますが、目的が異なります。

機能 目的
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の違い

reshaperesizeは名前が似ていますが、用途が異なります。

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を学ぶならぜひ覚えておきたい基本関数の一つです。

プログラミング学習に興味がある方は、まずは無料体験会へ

無料体験会・お申し込みはこちら