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の中級から上級のセクションに分類されます。ravel
rot90
flip
fliplr
flipud