我有一个列向量,我正在尝试编写一个以某种方式实现变量窗口函数的函数。 这意味着我想选择一行并跳过多行(这是可变部分),但不仅仅是跳过,我还要设置跳过行中其中一列的值等于它们之前选择的行同一列。该栏目是:
----------
P1
----------
P2
----------
P3
----------
P4
----------
所以我们的目标是用P1 P1 P3 P3 P4 P4创建一个新的列...变量部分意味着通过改变函数中的变量,可以用P1 P1 P1 P4 P4 P4 P7创建一个新列P7 P7 ......
我厌倦了这样的事情:(实施第一个案例)
% column vector containing P values a
a ;
delay = 0;
% f parameter to enter the delay processing
f = 2;
r = length(a);
i = 1;
while(i <= r)
if(mod(i, f) == 0)
for j = 0 : delay
a(i + j) = a(i - 1);
end
i = i + delay + 1;
else
i = i + 1;
end
end
我认为问题在于使用MOD功能或选择f。
的值感谢任何帮助。
答案 0 :(得分:0)
答案如下,包括窗口之间的比较以及将所有结果保存在数组中:
a = v;
r = length(a);
i = 1;
all_Results = [];
Vectors = [];
for window =1:128 ;
while(i < r)
for w = 1 : window;
if (i < r )
i = i+1;
a(i ) = a(i-1);
end
end
i = i + 1 ;
end
equal_elements = length(find(a==t));
accuracy = equal_elements/ length(t);
Results = [ window , accuracy ];
Vectors = [Vectors , a ];
all_Results = [all_Results; Results];
a = v;
i = 1;
end
答案 1 :(得分:0)
这是我的建议。我觉得有点简单。 为了使索引向量处于正确的形状,我借用了A similar function to R's rep in Matlab的解决方案。这与你的问题非常相似。
%# random vector, parameter i to enter the delay processing
vector = rand(1000000,1);
i=2;
%# entries of vector to be duplicated
repeat = 1:i:length(vector);
%# fill gaps in this index vector and cut to same length
matrix = repmat(repeat,i,1);
index = matrix(:);
index(length(vector)+1:end) = [];
%# generate desired result
vector = vector(index);
我机器上这些参数的时间安排:Elapsed time is 0.055114 seconds.