PythonのNumPyライブラリには、1次元配列から先頭と末尾のゼロをトリミングするtrim_zeros
関数があります。しかし、この関数は1次元配列にしか適用できません。そこで、2次元またはそれ以上の配列からゼロをトリミングする方法を探すことになります。
以下に、2次元配列からゼロをトリミングするためのPythonコードを示します。
import numpy as np
def trim_zeros_2D(arr):
nz = np.nonzero(arr) # 非ゼロ要素のインデックス
arr_trimmed = arr[nz[0].min():nz[0].max()+1, nz[1].min():nz[1].max()+1]
return arr_trimmed
この関数は、非ゼロ要素のインデックスを取得し、その範囲に基づいて配列をスライスします。
さらに、この関数はN次元配列に対応するように一般化することができます。
def trim_zeros(arr):
slices = tuple(slice(idx.min(), idx.max() + 1) for idx in np.nonzero(arr))
return arr[slices]
この関数は、各次元について非ゼロ要素の範囲をスライスし、その結果のビューを返します。
これらの関数を使用すると、PythonのNumPy配列からゼロを効率的にトリミングすることができます。これは、データ分析や前処理で非常に役立つことがあります。