【こつこつPython】Pythonで多次元配列を一次元配列に変換する方法|numpy.flatten

【こつこつPython】Pythonで多次元配列を一次元配列に変換する方法|numpy.flatten

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メソッドにはこのような違いがあることを覚えておきましょう。

関連メソッド

【毎日Python】Pythonで配列を作成する方法|NumPy.arange