本記事では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の配列の型であることを確認
コメント