fanzhenjie 发表于 2009-3-10 14:23

如何去掉数据中一些无用的点!

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

rocwoods 发表于 2009-3-10 15:02

常犯的错误,当你删除第一个点时,数组长度就变了。而且用循环的话,find是不必须的,用if判断。找到ii后另存在一个数组里,最后一起删。矢量化编程的话可以用diff+find语句。

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

fanzhenjie 发表于 2009-3-10 16:56

回复 沙发 rocwoods 的帖子

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

    1.2300    1.3500    1.4600       NaN    1.5300       NaN    1.5900    1.6300       NaN    1.8000

>>

friendchj 发表于 2009-3-10 17:17

回复 5楼 fanzhenjie 的帖子

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

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

fanzhenjie 发表于 2009-3-11 22:10

回复 地板 friendchj 的帖子

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

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

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

friendchj 发表于 2009-3-11 22:19

回复 7楼 fanzhenjie 的帖子

如果 abs(z-mean(z))大于某个数,就去掉相应的z.这样应该可以
页: [1]
查看完整版本: 如何去掉数据中一些无用的点!