如何去掉数据中一些无用的点!
我有一个数组,想把其中一些明显跳动的点去掉,现在我假设想去掉其中一些这样的点:如果这个数与它前面的数之差大于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 常犯的错误,当你删除第一个点时,数组长度就变了。而且用循环的话,find是不必须的,用if判断。找到ii后另存在一个数组里,最后一起删。矢量化编程的话可以用diff+find语句。
[ 本帖最后由 rocwoods 于 2009-3-10 15:09 编辑 ]
回复 沙发 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
>>
回复 5楼 fanzhenjie 的帖子
仿照aaa,建立一个新变量,记录z中满足要求的数。or
最后加一句:z=z(find(isnan(z)~=1))
[ 本帖最后由 friendchj 于 2009-3-10 17:20 编辑 ]
回复 地板 friendchj 的帖子
谢谢了,如果要增加一个新的变量来记录Z中满足要求的数,怎么写这个变量呀!假如我的Z是z=;,点3.26,3.53,2.86,2.95明显偏离了别的点,我想删除这点,有什么办法呀,用DIFF只能删除相邻两个点相差比较大,但如果相邻两点相差不大,但这两个点与另外点比较明显相差很大,有什么办法删除呀,
[ 本帖最后由 ChaChing 于 2009-3-12 10:15 编辑 ]
回复 7楼 fanzhenjie 的帖子
如果 abs(z-mean(z))大于某个数,就去掉相应的z.这样应该可以
页:
[1]