を見つけるかもしれない現在の要素は、内の要素でなければなりませんsize
(または例ではA[1]
)ですが、これは入力配列の端に依存することはできず、配列境界を処理するためのmode
に依存します。
繰り返しの間にある状態を維持するためにクラスを使用してフィルタの現在の位置を決定するためのdocs instead provide a neat example(以下の状況に適応します)。これは常に最後の次元を最初に反復します。あなたがしなければならないのは、result
行をフィルタ関数が実際に必要とするものに置き換えてください。あなたの場合、これはresult = self._array[self.coordinates] == buffer.max()
のようなものになります。
a = arange(12).reshape(3,4)
class fnc_class:
def __init__(self, _array):
# store the shape:
self.shape = _array.shape
self._array = _array
# initialize the coordinates:
self.coordinates = [0] * len(self.shape)
def filter(self, buffer):
result = self._array[tuple(self.coordinates)] == buffer.max()
print self.coordinates
# calculate the next coordinates:
axes = range(len(self.shape))
axes.reverse()
for jj in axes:
if self.coordinates[jj] < self.shape[jj] - 1:
self.coordinates[jj] += 1
break
else:
self.coordinates[jj] = 0
return result
fnc = fnc_class(a)
generic_filter(a, fnc.filter, footprint = [[1, 0], [0, 1]])
これは少なくとも私が使用している2Dの場合は動作しません。 'self._array'ルックアップに問題があります。私は今それを修正する方法を理解しようとしています.. – ajwood