0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Python】ravel, flatten, reshape

Posted at

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と同じで参照となります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?