Matlab中的简单滑动窗口过滤器 [英] simple sliding window filter in Matlab
问题描述
我没有 nlfilter
的包,我也不太了解 这个例子.
I don't have the package for nlfilter
and I didn't quite follow this example.
我有一个非常简单的函数 fun
并且我想将它应用到数组的移动窗口.数组是 Nx1
,我想查看长度 k
间隔,比如说.所以对于 N=10
和 k=3
和 fun = @(x) min(x);
我会得到
I have a really simple function fun
and I want to apply it to a moving window of an array. The array is Nx1
, and I want to look at length k
intervals, say. So for N=10
and k=3
and fun = @(x) min(x);
I would get
A = [13 14 2 14 10 3 5 9 15 8];
filter(A,k,fun) = [2 2 2 3 3 3 5 8];
这里我只想查看索引 1,2,3 然后是 2,3,4 然后...然后是 8,9,10,所以最终序列的长度是 7.我可以用 for 循环轻松做到这一点,但我不知道如何为 Matlab 向量化它.请帮忙.谢谢.
Here I only want to look at indices 1,2,3 then 2,3,4 then ... then 8,9,10, so the final sequence is length 7. I can do this easy with a for loop, but I have no idea how to vectorize it for Matlab. Help, please. Thanks.
推荐答案
这是一种非常简单快捷的方法:
Here is one very simple and fast way to do it:
>> min([A(1:(end-2)); A(2:(end-1)); A(3:end)], [], 1)
ans =
2 2 2 3 3 3 5 8
因为你想要一个完整的功能......
Since you want a full function...
function running_min = running_min(x, k)
xrep = repmat(x, 1, k);
xrep = reshape([xrep zeros(1, k)], length(x)+1, k);
running_min = min(xrep, [], 2)';
running_min = running_min(1:end-k);
这篇关于Matlab中的简单滑动窗口过滤器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!