スポンサーリンク

[numpy] 1次元配列と2次元配列の次元変換方法 (reshape・ravel・flatten)

1次元配列→2次元配列に変換(reshapeメソッド)

reshape関数を使うことで、1次元から2次元の配列に変換することができます。
以下のように、[0, 1, 2, 3, 4, 5]の配列を用意し、reshapeメソッドで、第一引数に行数、第2引数に列数を渡して変換できます。

IN

import numpy as np
arr1 = np.array([0, 1, 2, 3, 4, 5])
arr1.reshape((2, 3))

OUT

array([[0, 1, 2],
       [3, 4, 5]])

2次元配列→1次元配列に変換

ravelメソッド

ravelメソッドを使うことで、2次元から1次元の配列に変換できます。
また、ravelメソッドは参照コピーです。

以下の例では、1次元配列に変換しています。
また、参照コピーのため、途中でarr1の要素を変更しましたが、arr2にも反映されています。

IN

import numpy as np
arr1 = np.array([[0, 1, 2], 
                 [3, 4, 5]])
arr2 = arr1.ravel() # array([0, 1, 2, 3, 4, 5])
arr1[0][0] = 1
arr2

OUT

array([1, 1, 2, 3, 4, 5])

flattenメソッド

flattenメソッドは、機能としては、ravalメソッドとほとんど同じです。
異なる点としては、参照コピーでなく値コピーであることです。

以下の例では、arr1の要素を途中で変更してもarr2には影響がないことが分かります。

IN

import numpy as np
arr1 = np.array([[0, 1, 2], 
                 [3, 4, 5]])
arr2 = arr1.flatten() # array([0, 1, 2, 3, 4, 5])
arr1[0][0] = 1
arr2

OUT

array([0, 1, 2, 3, 4, 5])