flatten
があります。これらの関数の違いを以下で説明します。
-
ravel
:ravel
関数は、多次元配列を1次元に変換します。元の配列と同じデータを参照する新しいビューを作成します。つまり、ravel
によって返される出力配列の要素は、元の配列の要素と同じメモリ位置にあります。したがって、ravel
によって返される配列の変更は、元の配列にも反映されます。import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6]]) raveled = arr.ravel() print(raveled) # [1 2 3 4 5 6] raveled[0] = 10 print(arr) # [[10 2 3] # [4 5 6]]
-
flatten
:flatten
関数も多次元配列を1次元に変換しますが、新しいコピーを作成します。元の配列とは異なるメモリ位置にあるため、flatten
によって返される配列の変更は元の配列には影響を与えません。import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6]]) flattened = arr.flatten() print(flattened) # [1 2 3 4 5 6] flattened[0] = 10 print(arr) # [[1 2 3] # [4 5 6]]
要約すると、ravel
はビューを作成し、元の配列と同じメモリ位置を参照します。一方、flatten
はコピーを作成し、元の配列とは異なるメモリ位置に要素を持ちます。
これらの関数は、多次元配列を1次元に変換する場合や、配列の要素を処理する前に形状を変更する場合に役立ちます。適切な関数の選択は、特定の使用ケースと目的に基づいて行う必要があります。