arr = np.array([[0, 1],
[2, 3]])
arr.ravel()、arr.flatten()
ravelとflattenは、多次元配列を1次元配列に変換するメソッドです。「array([0, 1, 2, 3])」に変換されます。
ravelとflattenは、他の変数に代入したときの動きが異なります。ravelは参照を返し、flattenはコピーを返します。
■ ravel
a = np.array([[0, 1],
[2, 3]])
b = a.ravel()
b[0] = 4
a
▶︎ array([[4, 1],
[2, 3]])
変数bを定義する際に「aを参照して1次元に変換する」と定義されるため、bを変更すると参照先のaも変更されます。
■ flatten
a = np.array([[0, 1],
[2, 3]])
b = a.flatten()
b[0] = 4
a
▶︎ array([[0, 1],
[2, 3]])
変数bを定義する際に「aをコピーして1次元に変換する」と定義されるため、bを変更してもaには影響がありません。
arr.reshape(-1, 1)、arr.reshape(-1)
reshapeは配列の形状を変換するメソッドです。例えば「arr = np.array([0, 1, 2, 3, 4, 5])」に対して「arr.reshape(2, 3)」とすると、2行3列の配列に変換されます。
変換前の要素数と変換後の要素数が一致していないとエラーになるため、行数と列数を計算して指定する必要があります。
ここで便利なのが「-1」を使った自動計算です。
「arr.reshape(2, -1)」のように列に「-1」を指定すると、2行に合うように列数が自動計算されます。
「arr.reshape(-1, 3)」のように行に「-1」を指定すると、3列に合うように行数が自動計算されます。
多次元配列に対して「arr.reshape(-1)」とすると、1次元に変換されます。「array([0, 1, 2, 3])」に変換されます。
「arr.reshape(-1, 1)」は、1列に合うように行数が自動計算され以下の結果になります。次元数は2のままです。
array([[0],
[1],
[2],
[3]])
なお、reshapeはravelと同じで参照となります。