【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]
Bardに配列をフラットにする関数を教えてもらいました
[Brad] NumPy には配列をフラットにする関数がいくつかあります。最も一般的な方法は、ravel() メソッドを使用することです。ravel() メソッドは、配列のコピーを作成せずに配列のフラットなビューを返します。flatten() メソッドも配列をフラット化しますが、配列のコピーを作成します。これにより、配列の要素を変更しても元の配列に影響を与えずに操作できるようになります。最後に、reshape() メソッドを使用して、配列を新しい形状に再形成することで、配列をフラット化することもできます。reshape() メソッドの引数として -1 を指すと、配列の要素数に応じて要素が自動的に配置されます。次の例は、これらの各メソッドを使用して配列をフラット化する方法を示しています。
◆◆◆◆◆
import numpy as np
# 配列の作成
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 配列のフラット化
b = a.ravel()
# 配列の要素の表示
print(b)
# [1 2 3 4 5 6 7 8 9]
# 配列のフラット化(コピー)
c = a.flatten()
# 配列の要素の表示
print(c)
# [1 2 3 4 5 6 7 8 9]
# 配列のフラット化(再形成)
d = a.reshape(-1)
# 配列の要素の表示
print(d)
# [1 2 3 4 5 6 7 8 9]
◆◆◆◆◆