为了账号安全,请及时绑定邮箱和手机立即绑定

如何用matlab编程实现多重过滤

如何用matlab编程实现多重过滤

暮色呼如 2018-11-13 20:22:44
题目描述matlab编程小白一枚 请求各位大神给个思路 用matlab编程造一个过滤器过滤数据里的条目题目来源及自己的思路手头上有一份原始数据 没有标签只有数字那种 其中的第二列是心跳现在需要把心跳检测为0的条目过滤掉之前都是撸的别的语言 完全没思路。。。老板给的思路是提取increment相关代码// 请把代码文本粘贴到下方(请勿用图片代替代码)部分数据:(没有标签 没有标签 只有数字 第二列是心跳)0.00 0 -1 -1 -127 -1 -1 52 -10.25 0 -1 -1 -127 -1 -1 52 -10.50 0 -1 -1 -127 -1 -1 51 -10.75 0 -1 -1 -127 -1 -1 51 -11.00 0 -1 -1 -127 -1 -1 50 -11.25 0 -1 -1 -127 -1 -1 50 -11.50 0 -1 -1 -127 -1 -1 50 -11.75 0 -1 -1 -127 -1 -1 52 -12.00 0 -1 -1 -127 -1 -1 52 -12.25 0 -1 -1 -127 -1 -1 54 -12.50 0 -1 -1 -127 -1 -1 53 -12.75 133 -1 -1 -127 -1 -1 54 -13.00 133 -1 -1 -127 -1 -1 56 -13.25 130 -1 -1 -127 -1 -1 54 -13.50 130 -1 -1 -127 -1 -1 56 -13.75 126 -1 -1 -127 -1 -1 57 -14.00 126 -1 -1 -127 -1 -1 56 -14.25 121 -1 -1 -127 -1 -1 56 -14.50 121 -1 -1 -127 -1 -1 56 -14.75 120 -1 -1 -127 -1 -1 52 -1你期待的结果是什么?实际看到的错误信息又是什么?过滤条件:1.检测到一条数据心跳为0时, 如果从这条开始计算,后续累计的0的条目数小于等于20, 批量删除掉这些条目;2.如果后续累计的0的条目大于20小于80, 计算平均数:(起始0条目之前的非0条目+累计0条目结束后第一条非0条目)/2然后把算出的平均数安到这些条目里去有点复杂 求一个思路和相关命令关键词 跪谢
查看完整描述

1 回答

?
Helenr

TA贡献1780条经验 获得超3个赞

如果你的数据库是M,即

M = [0.00 0 -1 -1 -127 -1 -1 52 -10.25 0 -1 -1 -127 -1 -1 52 -10.50 0 -1 -1 -127 -1 -1 51 -10.75 0 -1 -1 -127 -1 -1 51 -1....4.50 121 -1 -1 -127 -1 -1 56 -14.75 120 -1 -1 -127 -1 -1 52 -1];

最直接的思路是用一个简单粗暴的for循环:

MSub = M(:,2); % 先把第二列提出来,提高检索效率skipCountCache = 0; % 数据为0,连续跳过计数暂存finalSkipCount = 0; % 最终需要略去的数据计数accumsum = 0; %累和for i = 1:numel(MSub)    if M(i) == 0
        skipCountCache = skipCountCache + 1;        if skipCountCache > 80 % 若跳过计数超过80,退出循环计算平均数
            break;        end
        continue;    end

    if skipCountCache > 20
        skipCountCache = 0; % 若跳过计数超过20,重置计数
    else                
        finalSkipCount = finalSkipCount + skipCountCache; % 否则计入finalSkipCount
        skipCountCache = 0; % 重置计数
    end
            
    accumsum = accumsum + MSub(i);endfinalSkipCount = finalSkipCount + skipCountCache; 把最后所有的0都计入finalSkipCount
average = accumsum / (i - finalSkipCount);

for循环很好理解,也很好写,但是运行效率不高,特别是当你的数据量较大时。

这时候,我们可以用另一种方法,创建一个0和1组成的过滤器(实质上是一个logical array),然后用finddiff对过滤器处理。


查看完整回答
反对 回复 2018-11-13
  • 1 回答
  • 0 关注
  • 614 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信