Я пытаюсь применить гауссовую фильтрацию к изображениям набора игрушечных цифр.Хранит изображения в массиве (1797, 8, 8).По отдельности я могу заставить его работать, но когда я пытаюсь применить его для всего изображения, установленного с apply_along_axis
, что-то идет не так.
Вот основной пример:
from sklearn.datasets import load_digits
from scipy.ndimage.filters import gaussian_filter
images = load_digits().images
# Filter individually
individual = gaussian_filter(images[0], sigma=1, order=0)
# Use `apply_along_axis`
transformed = np.apply_along_axis(
func1d=lambda x: gaussian_filter(x, sigma=1, order=0),
axis=2,
arr=images
)
# They produce different arrays
(transformed[0] != individual).all()
Out: True
Iпопытался изменить ось, но это не помогло.Я также проверил, во-первых, просто возвращая значения изображения / квадрата.В этих случаях результаты кажутся эквивалентными.Однако применение точечного продукта снова приводит к другим результатам.
# Squared values
transformed = np.apply_along_axis(
func1d=lambda x: x ** 2,
axis=2,
arr=images
)
# They produce the same arrays
(transformed[0] == images[0] ** 2).all()
Out: True
# Dot product
transformed = np.apply_along_axis(
func1d=lambda x: np.dot(x, x),
axis=2,
arr=images
)
individual = np.dot(images[0], images[0])
# They produce different arrays
(transformed[0] != individual).all()
Out: True
Я уверен, что неправильно понимаю работу этих функций.Что я делаю не так?
Обновление: Как указал @hpaulj в комментариях, параметр func1d
в apply_along_axis
принимает только 1d массивы. См ...