我没有nlfilter的软件包,也没有完全遵循this example
我有一个非常简单的函数fun,我想将它应用于数组的移动窗口数组是Nx1,我想看看长度k的间隔所以对于N=10k=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);

10-01 22:06