【问题标题】:Python implementation of MATLAB's movmin [duplicate]MATLAB的movmin的Python实现[重复]
【发布时间】:2019-12-09 10:35:17
【问题描述】:

我正在寻找一个可以实现movmin功能的Python函数。我在下面包含了Matlab description of movmin

M = movmin(A,k) 返回一个以k 为中心的局部最小值数组,其中每个最小值是在长度为k 的滑动窗口上跨A 的相邻元素计算的。当k 为奇数时,窗口以当前位置的元素为中心。当k 为偶数时,窗口以当前和先前元素为中心。当没有足够的元素来填充窗口时,窗口大小会在端点处自动截断。当窗口被截断时,最小值仅接管填充窗口的元素。 MA 大小相同。

如果A 是向量,则 movmin 沿向量的长度进行运算。

如果A 是一个多维数组,则movmin 沿大小不等于1 的第一个数组维度进行运算。

我的输入是一个多维数组。

【问题讨论】:

  • 您能否添加一个Ak 输入的小示例,以及movmin 产生的后续结果?
  • @Xukrao 我会尽快添加更改。
  • 您是否编写了任何代码来尝试复制此功能?如果是这样,您也应该包括在内。
  • 移动最小值是侵蚀。 Python中有实现腐蚀的图像处理工具箱。使用这些。

标签: python matlab numpy


【解决方案1】:

movMin 向量的代码:

def movMin(datas,k):
result = np.empty_like(datas)
start_pt = 0
end_pt = int(np.ceil(k/2))

for i in range(len(datas)):
    if i < int(np.ceil(k/2)):
        start_pt = 0
    if i > len(datas) - int(np.ceil(k/2)):
        end_pt = len(datas)
    result[i] = np.min(datas[start_pt:end_pt])
    start_pt += 1
    end_pt +=1
return result

测试用例:

a = [15,14,11,14,14,4,3,20,4,1]
movMin(a,4)
array([14, 11, 11, 11,  4,  3,  3,  3,  1,  1])
b = [1,14,11,14,4,11,6,3,20,4,2]
movMin(b,11)
array([1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2])

这是代码和测试用例供参考。

【讨论】:

    【解决方案2】:

    Pandas dataframes 为许多不同类型的移动窗口计算提供了简洁而强大的方法(或者正如 Pandas 所说:rolling window)。这是 MATLAB 的 movmin 文档中 Moving Minimum of Matrix 示例的复制:

    import pandas as pd
    
    A = pd.DataFrame([[4, 8, 6], [-1, -2, -3], [-1, 3, 4]])
    M = A.rolling(window=3, min_periods=1, center=True, axis=1).min()
    
    print(M)
    # Output:
    #      0    1    2
    # 0  4.0  4.0  6.0
    # 1 -2.0 -3.0 -3.0
    # 2 -1.0 -1.0  3.0
    

    【讨论】:

      猜你喜欢
      • 2021-11-01
      • 2017-10-01
      • 1970-01-01
      • 2020-08-02
      • 2019-02-05
      • 2015-07-28
      • 2014-08-18
      • 2013-04-07
      • 2013-08-04
      相关资源
      最近更新 更多