Yếu tố hiện nay nên được các yếu tố trong trung tâm của size
(hoặc A[1]
trong ví dụ của bạn), nhưng điều này không thể được dựa vào ở các cạnh của mảng đầu vào và phụ thuộc vào mode
để xử lý đường viền mảng.
docs instead provide a neat example (điều chỉnh cho tình huống của bạn bên dưới) để xác định vị trí hiện tại trong bộ lọc sử dụng lớp để duy trì trạng thái giữa các lần lặp. Điều này luôn luôn lặp lại thông qua kích thước cuối cùng trước tiên; tất cả những gì bạn cần làm là thay thế đường dây result
bằng bất kỳ chức năng lọc nào của bạn thực sự cần làm, trong trường hợp của bạn, điều này sẽ giống như 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]])
Điều này không hoạt động .. ít nhất trong trường hợp 2D tôi đang sử dụng. Đã xảy ra sự cố với tra cứu 'self._array'. Tôi đang cố gắng tìm cách khắc phục nó .. – ajwood