【问题标题】:find consecutive nonzero values查找连续的非零值
【发布时间】:2013-06-29 01:29:56
【问题描述】:

我正在尝试编写一个简单的 MATLAB 程序,它将找到第一个(超过 70 个)连续非零值链并返回该连续链的起始值。

我正在处理来自操纵杆的运动数据,在实际试验开始之前有几千行数据混合了零和非零值(来自受试者在试验实际开始之前稍微移动操纵杆)。

我需要先删除这些行,然后才能开始分析试验中的运动。

我确信这是一件相对简单的事情,所以我希望有人能提供见解。 提前谢谢你

编辑:这是我尝试过的:

s = zeros(size(x1)); 

for i=2:length(x1) 
    if(x1(i-1) ~= 0) 
        s(i) = 1 + s(i-1); 
    end 
end 

display(S); 

对于一个最大链为 72 的向量 x1,但我不知道如何找到最大链并返回它的第一个值,所以我知道在哪里修剪。我也真的不认为这是最好的策略,因为我的数据中的最大链将是数万个值。

【问题讨论】:

  • 欢迎来到 SO。在这里,请拨打tour。你试过什么?
  • s = zeros(size(x1));对于 i=2:length(x1) if(x1(i-1)~=0) s(i) = 1 + s(i-1);端端显示(S);对于最大链为 72 但我不知道如何找到最大链并返回其第一个值的向量 x1,所以我知道在哪里修剪。谢谢
  • 没问题。不过,我编辑了您的帖子以删除感谢。在一个问题中它不是“适当的”。
  • 太棒了,该代码运行良好。但是,我可以理解它,第一个 if 语句和计数器如何专门计算连续链?我尝试过类似的方法,计数器在到达最长链之前达到了 70 以上,这仅仅是因为它正在计算向量中的所有非零数字,而不是连续的。
  • 请注意,此评论应作为我的回答下的评论,而不是主要问题。抱歉,我很迂腐……我将用一个额外的解释来编辑我的答案。检查那里。

标签: matlab find return-value chain


【解决方案1】:

这个答案对于任何链大小都是通用的。它在向量x1 中找到最长的链并检索该链val 的第一个元素。

首先我们将使用bwlabel 标记连接的组件,例如:

s=bwlabel(x1);

那么我们可以使用tabulate得到s的频率表,找到最大连通分量的第一个元素:

t=tabulate(s);
[C,I]=max(t(:,2));
val=x1(find(s==t(I,1),1, 'first'));

这应该适用于您有一个不同的最大尺寸链的情况。如果您有多个具有最大长度的链,会发生什么情况? (你仍然可以使用我的代码稍作修改......)

【讨论】:

    【解决方案2】:

    您不需要使用辅助向量来跟踪索引:

    for i = 1:length(x)
        if x(i) ~= 0
                count = count + 1;
        elseif count >= 70
                lastIndex = i;
                break;
        else
                count = 0;
        end
    
        if count == 70
               index = i - 69;
        end
    end
    

    要从x 中删除链中的所有元素,您可以这样做:

    x = x([lastIndex + 1:end]);
    

    编辑(基于评论):
    您这样做的方式不起作用的原因是因为您在遇到 0 时没有重置计数器,这就是:

    else
       count = 0;
    

    是为了;如果您愿意,它会重置该过程。 为了更清楚起见,在您的原始代码中,这将通过以下方式反映出来:

      if x1(i-1) ~= 0 
            s(i) = 1 + s(i-1); 
      else
            s(i) = 0;
      end 
    

    【讨论】:

    • 没问题。祝您研究顺利。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多