[NumPy] 多次元配列をフラットにする関数
多次元配列をフラットにして(一次元配列にして)返す関数の一覧です。
numpy.ravel()
numpy.ravel() は受け取った多次元配列を フラット にして 1 次元配列を返します。
# NUMPY_FLAT_01
# 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_FLAT_02
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() と同じく高速処理に向いています。
# NUMPY_FLAT_03
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]
コメントを書く