选择矩阵Matlab的特定行(窗口函数)

时间:2014-02-13 16:50:15

标签: matlab function matrix rows windowing

我有一个列向量,我正在尝试编写一个以某种方式实现变量窗口函数的函数。 这意味着我想选择一行并跳过多行(这是可变部分),但不仅仅是跳过,我还要设置跳过行中其中一列的值等于它们之前选择的行同一列。该栏目是:

----------
  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。

的值

感谢任何帮助。

2 个答案:

答案 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.