我没有nlfilter
的软件包,也没有完全遵循this example。
我有一个非常简单的函数fun
,我想将它应用于数组的移动窗口数组是Nx1
,我想看看长度k
的间隔所以对于N=10
和k=3
以及fun = @(x) min(x);
我会得到
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中对其进行矢量化请帮忙谢谢。
最佳答案
以下是一个非常简单快捷的方法:
>> min([A(1:(end-2)); A(2:(end-1)); A(3:end)], [], 1)
ans =
2 2 2 3 3 3 5 8
编辑:既然你想要一个完整的功能。。。
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);