NumPy配列の再形成


アレイの形状変更

形状変更とは、配列の形状を変更することを意味します。

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

形状を変更することで、ディメンションを追加または削除したり、各ディメンションの要素数を変更したりできます。


1次元から2次元への形状変更

次の12個の要素を持つ1次元配列を2次元配列に変換します。

最も外側の次元には4つの配列があり、それぞれに3つの要素があります。

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次元配列に変換します。

最も外側の次元には、それぞれ2つの要素を持つ3つの配列を含む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)


任意の形に変形できますか?

はい、形を変えるために必要な要素が両方の形で等しい限り。

8要素の1D配列を2行2D配列の4要素に再形成することはできますが、3x3 = 9要素が必要になるため、3要素の3行2D配列に再形成することはできません。

8要素の1D配列を各次元に3要素の2D配列に変換してみてください(エラーが発生します)。

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)

上記の例では元の配列が返されるため、これはビューです。


未知の次元

あなたは1つの「未知の」次元を持つことが許されています。

つまり、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)

注:-1複数のディメンションに渡すことはできません。


配列を平坦化する

配列の平坦化とは、多次元配列を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たりするための関数はたくさんあります。これらnumpyの中級から上級のセクションに分類されます。ravelrot90flipfliplrflipud


エクササイズで自分をテストする

エクササイズ:

正しいNumPyメソッドを使用して、配列の形状を1次元から2次元に変更します。

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])

newarr = arr.(4, 3)