【问题标题】:NumPy - median filter debugging exerciseNumPy - 中值滤波器调试练习
【发布时间】: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


【解决方案1】:

@Nakor 认为我想太多了,这就是我所需要的。

代码结构也让我感到困惑,但鉴于这是一个调试问题,需要我处理特定的错误代码,那么我对这个问题的解决方案是简单地删除 X 的最后一个元素

【讨论】:

    猜你喜欢
    • 2015-11-06
    • 2011-10-02
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 2014-09-06
    相关资源
    最近更新 更多