声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1345|回复: 5

[综合讨论] 如何去掉数据中一些无用的点!

[复制链接]
发表于 2009-3-10 14:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
我有一个数组,想把其中一些明显跳动的点去掉,现在我假设想去掉其中一些这样的点:如果这个数与它前面的数之差大于0.5,就去掉它!我编了下面简单的程序,不知道为什么不对,大家帮我看看呀!谢谢!
z=[1.23,1.35,1.46,3.26,1.53,2.86,1.59,1.63,2.95,1.8];
for li=1:length(z)
   ii=find(z(li)-z(li-1)>=0.5)
    z(ii)=[];
end
disp([z])
上面的数我想去掉的是:3.26,2.86,2.95
回复
分享到:

使用道具 举报

发表于 2009-3-10 15:02 | 显示全部楼层
常犯的错误,当你删除第一个点时,数组长度就变了。而且用循环的话,find是不必须的,用if判断。找到ii后另存在一个数组里,最后一起删。矢量化编程的话可以用diff+find语句。

[ 本帖最后由 rocwoods 于 2009-3-10 15:09 编辑 ]

评分

1

查看全部评分

 楼主| 发表于 2009-3-10 16:56 | 显示全部楼层

回复 沙发 rocwoods 的帖子

我改成如下:结果对,但我不想要NaN;应该怎么改呢,当我用[  ]的时候,好像破坏了矩阵,不知道怎么改,能帮我看看吗?
clear;
clc;
z=[1.23,1.35,1.46,3.26,1.53,2.86,1.59,1.63,2.95,1.8];
yd=diff(z);
aaa=[];
for i=1:length(yd)
    if yd(i)>1
        aaa=[aaa,i]; % 记录yd大于1的数的位置
    else
        if ~isempty(aaa) % 若存在yd大于1的情况,进行处理
             z(aaa+1)=NaN;                     
        end
    end
end
display([z]);
z =

    1.2300    1.3500    1.4600       NaN    1.5300       NaN    1.5900    1.6300       NaN    1.8000

>>
发表于 2009-3-10 17:17 | 显示全部楼层

回复 5楼 fanzhenjie 的帖子

仿照aaa,建立一个新变量,记录z中满足要求的数。
or
最后加一句:z=z(find(isnan(z)~=1))

[ 本帖最后由 friendchj 于 2009-3-10 17:20 编辑 ]

评分

1

查看全部评分

 楼主| 发表于 2009-3-11 22:10 | 显示全部楼层

回复 地板 friendchj 的帖子

谢谢了,如果要增加一个新的变量来记录Z中满足要求的数,怎么写这个变量呀!

假如我的Z是z=[1.23,1.35,1.46,3.26,3.53,2.86,1.59,1.63,2.95,1.8];,点3.26,3.53,2.86,2.95明显偏离了别的点,我想删除这点,有什么办法呀,用DIFF只能删除相邻两个点相差比较大,但如果相邻两点相差不大,但这两个点与另外点比较明显相差很大,有什么办法删除呀,

[ 本帖最后由 ChaChing 于 2009-3-12 10:15 编辑 ]
发表于 2009-3-11 22:19 | 显示全部楼层

回复 7楼 fanzhenjie 的帖子

如果 abs(z-mean(z))大于某个数,就去掉相应的z.这样应该可以

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-22 19:45 , Processed in 0.063901 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表