假设向量v
尺寸的1 x n
和功能fun
接受一个长度向量L
并返回一个大小向量p x 1
.
是否有一个 MATLAB 函数可以接受向量v
,处理每个长度的滑动窗口L
使用函数 fun,并返回大小的矩阵p x n
(or p x (n-L)
).
我知道这可以通过创建窗口向量矩阵来实现im2col
并处理其中的每一个,但这对于长向量来说需要太多内存v
.
funsl=@(is) fun(v(is:is+l-1));
cell2mat(arrayfun(funsl,1:length(v)-l+1,'UniformOutput',false))
我在这里所做的是定义一个匿名函数,对于固定的v
and l
和一个起始索引参数(is
), 获取相应的切片v
并适用fun
to it.
然后应用这个函数,通过arrayfun
,到该起始索引的所有有用值。由于我自己目前无法说出的原因,每个应用程序都会返回一个p x 1
向量,但是arrayfun
无法将其排列成适当的矩阵,因此 UniformOutput=false 设置和cell2mat
打电话给它周围。
Edit:为了使用将 1×5 向量转换为 4×1 向量的函数进行测试,我使用了
l=5;v=1:12; fun=@(x) cumsum(x(2:end))';
并得到这个结果:
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
再次注意,在定义中funsl
v
是固定的,要将此方法应用于不同的v
你可以创建另一个函数v
(and l
,如果您不想修复此问题)作为参数,包含上面的两行并返回第二行的结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)