永发信息网

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

答案:2  悬赏:40  手机版
解决时间 2021-02-22 00:44
matlab筛选一列数据,要求剔除连续N个以上的某个值,N个以下的保留?要剔除的值已知.
最佳答案
设原来数列是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月末台湾穿衣指数,1⃣️月31日至2月8日会去
兴源宾馆怎么去啊,有知道地址的么
神州租车怎么平时和周日看的价格不一样了
仓库领料流程作业指导书
当一名记者采访到了“中国克服自身困难,及时
一个目字被一片叶子挡住一角是什么成语
中海油四个分公司各具什么特点,哪个更适合一
大千印象米娅画材赣州体验店怎么去啊,有知道
地转偏向力是怎样形成的?
轮胎m s 111h是什么意达
改革前退休的机关事业单位人员有职业年金吗?
如何判断一个小狗有多大?
推荐资讯
发烧了能吹空调吗
龙井茶怎么泡才好喝?
一篇读后感关于《茶花女》的
316L不锈钢可以承受多少公斤压力
谜语:五更降雪初啼晨
脸上毛多怎么办
哪些品牌的白茶是福鼎白茶?
黄州区黄冈市禹王工商局哪位知道具体地址啊
张家口市大东房地产开发有限公司我想知道这个
网红餐厅"哥老官"门店开2天停业了?
朵朵(科沃斯扫地机器人)具备哪些优点呢?求
高考370分可以上的大学 370分左右能上什么学
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?