【发布时间】:2021-01-17 21:02:53
【问题描述】:
我正在处理一项让我调试以下代码的作业。
import numpy as np
def subtract_smooth(x, y):
y_new = y - median_filter(x, y, 1.)
return y_new
def median_filter(x, y, width):
y_new = np.zeros(y.shape)
for i in range(len(x)):
y_new[i] = np.median(y[np.abs(x - x[i]) < width * 0.5])
return y_new
print(subtract_smooth(np.array([1,2,3,4,5]),np.array([4,5,6,8])))
我得到的错误是:
line 13, in median_filter
y_new[i] = np.median(y[np.abs(x - x[i]) < width * 0.5])
IndexError: boolean index did not match indexed array along dimension 0; dimension is 4 but corresponding boolean dimension is 5
我知道我们正在过滤 y 并使用 x/width 作为索引 y 进行中值过滤操作的方法。
我也明白这个错误是因为x有五个元素所以比较运算符创建的布尔数组与y的大小不匹配。
我可以通过删除x 的元素来运行代码,但我很清楚这不是预期的修复,因为输出减法平滑数组全为零。
尽管我了解每行代码的作用、np.median 的工作原理以及中值滤波在理论上的工作原理,但我无法弄清楚 median_filter 函数应该如何工作。根据我的在线研究,我很确定它使用的是“滑动窗口”方法,但这是一个疯狂的猜测。
请有人向我解释一下这段代码是如何工作的。提前致谢。
【问题讨论】:
-
为什么你认为零向量是错误的?因为据我所见,您有一个大小为 1 的滑动窗口,您减去原始向量,所以它看起来应该全为零。话虽如此,代码看起来让我非常困惑,尤其是 x 是一个具有简单范围的输入这一事实。
-
@Nakor 你是对的。我需要查看 y_new 以了解中值滤波器的输出是什么。我想我可能想多了。
标签: python arrays numpy filtering