假设尺寸1 x n
和功能fun
,取入长度L
的向量,并返回大小p x 1
的向量的向量v
的返回矩阵处理矢量。MATLAB函数与滑动窗口功能,矢量响应
是否有一个MATLAB函数,将采取在矢量v
,处理长度L
与功能乐趣的各滑动窗口,并返回大小p x n
(或p x (n-L)
)的基质中。
我知道这可以通过创建一个带有im2col
的加窗矢量矩阵并处理其中的每一个来实现,但是这对于长矢量v
需要太多内存。
假设尺寸1 x n
和功能fun
,取入长度L
的向量,并返回大小p x 1
的向量的向量v
的返回矩阵处理矢量。MATLAB函数与滑动窗口功能,矢量响应
是否有一个MATLAB函数,将采取在矢量v
,处理长度L
与功能乐趣的各滑动窗口,并返回大小p x n
(或p x (n-L)
)的基质中。
我知道这可以通过创建一个带有im2col
的加窗矢量矩阵并处理其中的每一个来实现,但是这对于长矢量v
需要太多内存。
[email protected](is) fun(v(is:is+l-1));
cell2mat(arrayfun(funsl,1:length(v)-l+1,'UniformOutput',false))
我在这里做什么是定义一个匿名函数,对于一个固定的v
和l
和起始索引参数(is
),得到的v
相应切片,适用fun
它。
然后通过arrayfun
将此函数应用于此起始索引的所有有用值。由于我自己目前不能完全命名的原因,每个应用程序都会返回一个p x 1
向量,但arrayfun
无法将其排列成适当的矩阵,因此UniformOutput = false设置和cell2mat
都会调用它。
编辑:
ans =
2 3 4 5 6 7 8 9
5 7 9 11 13 15 17 19
9 12 15 18 21 24 27 30
14 18 22 26 30 34 38 42
:要使用将1×5矢量为I用于
l=5;v=1:12; [email protected](x) cumsum(x(2:end))';
,得到了这样的结果4×1矢量的功能测试此再次注意,在funsl
的定义v
是固定的,要将此方法应用于不同的v
,您可以制作另一个需要v
(和l
,如果你不想解决这个问题)作为参数,包含上面的两行并返回第二个结果。
从这个其他post同样的解决方案可以适用(有一些修改):
n = 7; L = 3;
v = rand(1,n); %# 1-by-n vector
M = num2cell(v(hankel(1:L,L:n)),1); %# sliding windows of length L
fcn = @(x)[min(x);max(x);sum(x)]; %# function that takes a vector of length L
%# and returns a p-by-1 vector (p=3)
%# apply function to sliding windows, result is a p-by-(n-L+1) matrix
M = cell2mat(cellfun(fcn, M, 'UniformOutput',false));