【NumPy】多次元配列をフラットにする関数
多次元配列をフラットにして(一次元配列にして)返す関数の一覧です。
numpy.ravel()
numpy.ravel() は受け取った多次元配列を フラット にして 1 次元配列を返します。
# NUMPY_RAVEL # In[1] import numpy as np # [[1 2 3] # [4 5 6] # [7 8 9]] x = np.arange(1, 10).reshape(3, 3) # xをフラットにする rv_x = np.ravel(x) print(rv_x) # [1 2 3 4 5 6 7 8 9]
numpy.ravel() は受け取った配列の見た目を変えるだけで、コピーを作りません。したがって、フラット化された配列の要素を変更すると、もとの多次元配列も影響を受けてしまいます。
# In[2] # フラット化された配列のインデックス0の要素を変更 rv_x[0] = 99 # もとの多次元配列xを表示 print(x) # [[99 2 3] # [ 4 5 6] # [ 7 8 9]]
numpy.ravel() はコピーを作らないので、後述するメソッド ndarray.flatten() よりも高速処理できるという利点がありますが、その代わりに書き換えのリスクを伴います。
ndarray.flatten()
ndarray.flatten() は多次元配列をフラット化して 1 次元配列を返すメソッドです。
# NUMPY_FLATTEN # In[1] import numpy as np # [[1 2 3] # [4 5 6] # [7 8 9]] y = np.arange(1, 10).reshape(3, 3) # yをフラットにする flat_y = y.flatten() print(flat_y) # [1 2 3 4 5 6 7 8 9]
numpy.ravel() がビューを生成するのに対して、ndarray.flatten() はコピーを作るので処理速度で劣ります。
ndarray.reshape(-1)
ndarray.reshape() に -1 を渡すと多次元配列がフラット化されます。
NumPy のコードでは最もよく使われる方法です。このメソッドはビューを生成するので、numpy.ravel() と同じく高速処理に向いています。
# NDARRAY_RESHAPE # In[1] import numpy as np # [[1 2 3] # [4 5 6] # [7 8 9]] z = np.arange(1, 10).reshape(3, 3) # yをフラットにする flat_z = z.reshape(-1) print(flat_z) # [1 2 3 4 5 6 7 8 9]
コメント