永发信息网

matlab筛选一列数据,要求剔除连续N个以上的某个值,N个以下的保留?要剔除的值已知.

答案:2  悬赏:40  手机版
解决时间 2021-02-22 00:44
  • 提问者网友:謫仙
  • 2021-02-21 14:38
matlab筛选一列数据,要求剔除连续N个以上的某个值,N个以下的保留?要剔除的值已知.
最佳答案
  • 五星知识达人网友:想偏头吻你
  • 2021-02-21 15:12
设原来数列是IN需要剔除数值为V,长度超过N个数b=[0;(IN(:)==V);0];c=imopen(b,ones(N+1,1));OUT=IN(~c(2:end-1));OUT就是输出的序列======以下答案可供参考======供参考答案1:我想不出matlab有什么自带的功能函数来完成这个题目,所以自己写了一段,尽量避免用循环来查找,基本用逻辑运算完成了。这段代码估计我自己明天也看不懂了,希望你能看懂:delnum = 4;N = 3;% 连续三个以上就剔除a = [ 4 4 4 1 3 5 4 4 4 1 5 4 4 4 4 3 4 4 2 4 4 4 ]% 首先找到所有要删除数字的位置idx = find( a == delnum );% 计算位置的差分,目的是找到delnum的连续规律,% 差分为1的说明某个位置和下一个位置都是delnum,差分不为1说明delnum连续已中断% 比如数组a里第三个和第九个位置都是一个差分连续中断点df = [ diff( idx ), inf ];% 找到差分的中断点,中断点也可以看做是某一小段连续数字的最后一个数的位置% 为了计算方便,这里假定数组有一个位置0,也是一个中断点% 所以在break_pos中加入这个假设中断点break_pos = [ 0 find( df ~= 1 ) ];% 找到连续N个以上都是4的中断点位置exp_Pos = find( diff( break_pos ) >= N );% 创建一个逻辑矩阵,用来标记那些位置需要删除del_Pos = false( size( a ) );% 满足要求的一个中断点到下一个中断点之间的位置都需要删除for i = 1 : length( exp_Pos ) del_Pos( idx( break_pos( exp_Pos( i ) ) + 1 ) : idx( break_pos( exp_Pos( i ) + 1 ) ) ) = 1;enda( del_Pos ) = []输出结果:a = 4 4 4 1 3 5 4 4 4 1 5 4 4 4 4 3 4 4 2 4 4 4a = 1 3 5 1 5 3 4 4 2供参考答案2:用find(A>B),可以解决你的问题。
全部回答
  • 1楼网友:封刀令
  • 2021-02-21 16:20
这个答案应该是对的
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯