
まくまく
プラグラミング言語「PYTHON」を使ってみよう!!業務自動化・効率化の実例を踏まえ、解説できればと思っています。対象は、プログラムを学び始めた初心者向けとなります。今回はNumpyの三次元配列を一次元化してみようと思います。
Numpyとは?
NumPyは、数値計算を高速に行えるライブラリであり、機械学習やディープラーニングなどの分野でよく利用されています。
配列とは?
NumPyの基本的なデータ構造は、多次元配列になっています。
配列とは複数のデータを並べたものであり、Pythonのリストと同様のイメージを持つと分かりやすいと思います。
リストと異なるのは、配列は同じデータ型しか格納できないのが特徴です。リストのように整数と文字列を同じ配列に格納することはできません。
三次元配列を一次配列に変換
import numpy as np
a = np.arange(18).reshape(3,3,-1)
print(a)
b = a.reshape(-1)
c = a.ravel()
d = a.flatten()
print(b)
print(c)
print(d)
[[[ 0 1]
[ 2 3]
[ 4 5]]
[[ 6 7]
[ 8 9]
[10 11]]
[[12 13]
[14 15]
[16 17]]]
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17]
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17]
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17]
2行目で、arange関数、reshape関数を使い、三次配列を作成し”a”という変数に代入しています。
5行目、6行目、7行目では、それぞれの方法で変数a(三次配列)を一次元配列にしています。
5行目はreshape関数を(-1)とすることで、一次元配列にしています。
6行目はravel関数を用いて一次元配列にしています。
7行目はflstten関数を用いて一次元配列にしています。
ravelとflattenの違いは、ravelは元の配列の参照/ビューのみを返し、flattenは元の配列のコピーを返します。一般的にravelの方が処理が高速だと言われています。