【Python】NumPyで配列の次元変換をしよう

python

本記事ではNumPyを用いて多次元から1次元、1次元から多次元へ変換する方法について解説しています。目次は以下の通りです。

多次元から1次元

多次元から1次元にする方法はravelとflattenの2つの方法があります。

ravel

ravelを用いる構文は次のようになります。

np.ravel('多次元配列')

例を以下に示します。

import numpy as np
matrix1=[[4,1,7],[2,8,5],[9,6,3]]
matrix2=np.ravel(matrix1)
print(matrix2)

こちらを実行すると、[4 1 7 2 8 5 9 6 3]となります。

flatten

flattenを用いる構文は次のようになります。

'多次元配列'.flatten()

ここで注意すべき点は多次元配列の型です。ravelを使うときはリストかndarrayというNumPyの配列の型のどちらでも用いることができますが、flattenはNumPyの配列の型のみ対応しています。
例を以下に示します。

import numpy as np
matrix1=[[4,1,7],[2,8,5],[9,6,3]]
matrix2=np.ravel(matrix1)
print(matrix2)

こちらを実行すると、次のようになります。

AttributeError                            Traceback (most recent call last)
<ipython-input-13-cb52c7079988> in <cell line: 3>()
      1 import numpy as np
      2 matrix1=[[4,1,7],[2,8,5],[9,6,3]]
----> 3 matrix2=matrix1.flatten()
      4 print(matrix2)

AttributeError: 'list' object has no attribute 'flatten'

これはmatrix1はリスト型なので、flattenに適用されないことがわかります。
なので、NumPyの配列の型に変換できるnp.array(‘リスト’)を用いると、次のようになります。

import numpy as np
matrix1=np.array([[4,1,7],[2,8,5],[9,6,3]])
matrix2=matrix1.flatten()
print(matrix2)

こちらを実行すると、[4 1 7 2 8 5 9 6 3]となります。

1次元から多次元

こちらはreshapeを用います。構文は次の通りです。

'1次元配列'.reshape( )

ただしこちらもflattenの時と同様、1次元配列はNumPyの配列の型にしないといけないです。例として2次元配列にしていきます。

import numpy as np
matrix2=np.array([4, 1, 7, 2, 8, 5, 9, 6])
print(matrix2.reshape(2,4))

こちらを実行すると
[[4 1 7 2]
[8 5 9 6]]
となります。

一方で3次元配列にしていこうとすると次のようになります。

import numpy as np
matrix2=np.array([4, 1, 7, 2, 8, 5, 9, 6])
print(matrix2.reshape(2,2,2))

このようにreshapeの数字が3つあることがお分かりになると思います。実行すると次のようになります。

[[[4 1]
[7 2]]

[[8 5]
[9 6]]]

まとめ

本記事のポイントを以下にまとめます。

・多次元から1次元にする方法はnp.ravel( )と’多次元配列’.flatten()
・1次元から多次元にする方法は’多次元配列’.reshape( )
・flattenとreshapeを使用するときはNumPyの配列の型であることを確認

コメント

タイトルとURLをコピーしました