【问题标题】:Moving Window Average Convolution with different Radii - Python具有不同半径的移动窗口平均卷积 - Python
【发布时间】:2015-04-13 06:05:56
【问题描述】:

我想对一个数组执行基本的移动平均卷积,其中每个像素都替换为其周围像素的平均值。

但我的问题场景是这样的:

  • 我有两个数组 valueArrayradiiArray。两个阵列具有相同的形状。
  • 我需要将移动平均值应用于 valueArray,但我希望使用不同的半径来计算每个像素的平均值,而不是使用恒定半径来获取相邻像素 - 其值被存储在 radiiArray

我可以使用 for 循环 来实现它,但这会很耗时,因为数组太大了。这可以使用 numpy 库吗?

【问题讨论】:

  • 给我们一个使用循环的简单例子。用您的案例更容易测试和解释想法。是1d还是2d?重叠的窗口?
  • as_strided今天被提到用于另一个移动窗口案例,但可能不适用于不同的半径。 np.sum.reduceat 有一些可能性。 dot 数据与 weight 向量的乘积是另一种可能性(scipy sparse implements sum` 与矩阵乘积)。
  • 数组是 2d 并且有重叠的窗口,因为每个像素都取相邻平均值。
  • 使用 2d,您必须深入研究成像模块。我在numpy 中没有任何魔法。
  • 我四处搜索,但没有任何成像模块可以执行上述任务。任何人都可以指定一个可以进行上述卷积的模块吗?

标签: python arrays numpy


【解决方案1】:

由于您正在尝试相当定制的移动窗口平均卷积,因此您不太可能在现有库中找到它。

相反,您可以使用循环以直接的方式实现这一点。然后使用 Cython、f2py 或 numba 等将其加速到可与原生 C/Fortran 实现相媲美的水平,同时仍使用 numpy 在内存中访问和存储数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-01
    • 2020-07-04
    • 2020-07-12
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    • 2021-12-11
    相关资源
    最近更新 更多