我正在尝试对玩具数字数据集图像应用高斯滤波。它以(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
我试图更改轴,但这没有帮助。我还首先通过简单地返回图像/平方值来进行检查。在这些情况下,结果似乎是等效的。但是,应用点积又会产生不同的结果。
# 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
参数只接受一维数组。 See...