NumPy 配列のリサイズ

配列のリシェイプ

リシェイプとは、配列の形状を変更することを意味します。

配列の形状は、各次元の要素数です。

リシェイプすることで、次元を追加または削除したり、各次元の要素数を変更したりできます。

1次元から2次元へのリシェイプ

以下の12要素の1次元配列を2次元配列に変換します。

最外の次元は、各配列に3つの要素を持つ4つの配列を持つ次元です:

import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
newarr = arr.reshape(4, 3)
print(newarr)

実行例

1次元から3次元へのリシェイプ

以下の12要素の1次元配列を3次元配列に変換します。

最外の次元は、3つの配列を含む2つの配列を持つ2つの配列です:

import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
newarr = arr.reshape(2, 3, 2)
print(newarr)

実行例

どんな形状にもリシェイプできますか?

はい、リシェイプが必要な要素が2つの形状で等しい場合です。

8要素の1次元配列は2行2次元配列の4要素にリシェイプできますが、3行3次元配列にリシェイプすることはできません。なぜなら、それには3x3=9要素が必要だからです。

8要素を持つ1次元配列を、各次元に3要素を持つ2次元配列に変換しようと試みます(エラーが発生します):

import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
newarr = arr.reshape(3, 3)
print(newarr)

実行例

コピーかビューを返しますか?

返される配列がコピーかビューかを確認します:

import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
print(arr.reshape(2, 4).base)

実行例

上記の例は元の配列を返すため、ビューです。

未知の次元

「未知」の次元を使用できます。

これは、reshape メソッドで次元の1つに正確な数字を指定する必要がないことを意味します。

渡されます。 -1 NumPy は、その数字を計算してくれます。

8つの要素の 1D 配列を 2x2 要素の 3D 配列に変換:

import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
newarr = arr.reshape(2, 2, -1)
print(newarr)

実行例

注:以下のように、新しい配列を reshape(-1) で展開することができません。 -1 複数の次元に渡されます。

展平配列

展平配列(Flattening the arrays)とは、多次元配列を 1D 配列に変換することです。

以下を使用できます reshape(-1) これを達成する方法

配列を 1D 配列に変換:

import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
newarr = arr.reshape(-1)
print(newarr)

実行例

注:numpy flatten、ravel で配列の形状を変更できる多くの機能があり、rot90、flip、fliplr、flipud などの要素を再配置することもできます。これらの機能は、numpy の中級から上級の部分に属します。