Pythonで多次元配列を1次元配列に変換する方法です。
使用するのはPythonのnumpyライブラリのflattenメソッドです。
import numpy as np
このような2次元配列を使用します。
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
a
まず、flattenメソッドを使用して、この2次元配列aを1次元配列に変換してみましょう。
実行します。
a.flatten()
1次元配列に変換できました。
また、flattenメソッドは、デフォルトでは行を優先した順で1次元配列に変換します。
引数orderにFを指定すると、列を優先した順で1次元配列に変換できます。
実行します。
a.flatten(order='F')
列を優先した順で1次元配列に変換できました。
なお、似たメソッドにravelメソッドがあります。
flattenメソッドは配列を新たに作成して返しますが、ravelメソッドは配列があるメモリの場所を返します。
そのため、flattenメソッドで作成した1次元配列の値を変更しても、元の配列の値は変わりませんが、ravelメソッドで作成した1次元配列の値を変更すると、元の配列の値も変わります。
b = a.flatten()
c = a.ravel()
作成したそれぞれの配列の値を一部変更し、元の配列aが変化するか確認してみましょう。
まず、flattenメソッドで作成した配列bの0番目の値に10を代入し、元の配列aを表示してみます。
実行します。
b[0] = 10
a
配列aは変化しません。
次にravelメソッドで作成した配列cの0番目の値に10を代入し、元の配列aを表示してみます。
実行します。
c[0] = 10
a
配列aの0番目の値にも10が代入されています。
flattenメソッドとravelメソッドにはこのような違いがあることを覚えておきましょう。