fanzhenjie 发表于 2008-12-4 22:18

请教:一种处理数据的特殊方法!但不知道如何编程序?

假设我有一列从大到小的数据矩阵a,最开始的数据为100吧,我想把这些数据处理成如下的形式:100到96(不包括96)之间的每个数全部用100代替,96到91(包括96,不包括91)之间的每个数用95代替,91到86(包括91,不包括86)之间的每个数用90代替,86到81(包括86,不包括81)之间的数据用85代替,依次类推哈,一直到矩阵末尾。但每两个数之间拥的数的个数不唯一,即100到96之间假如有10个数,也许96到91就有二十个数哈!同时数据中可能没有95,90,85这些数哈!大家说这该如何处理呀?谢谢!

[ 本帖最后由 fanzhenjie 于 2008-12-4 22:21 编辑 ]

jww100 发表于 2008-12-5 04:28

a(1,1:n)=ones(1,n)*100
依此类推
如果很长,就写个循环吧

科技在线 发表于 2008-12-5 07:50

最好是些个循环了

ChaChing 发表于 2008-12-5 07:56

Help find

try a(find(a>91 & a<97))=95;

fanzhenjie 发表于 2008-12-5 16:01

回复 地板 ChaChing 的帖子

谢谢,请问怎么写个循环呀?

fanzhenjie 发表于 2008-12-5 16:39

回复 地板 ChaChing 的帖子

假设我现在想这样排列这些数据,这样应该简单些,一个数组Y存放着许多数,最大数为100,我就想把其中大于等于95小于100的数变为(95+100)./2;大于等于90小于95的数变为(90+95)./2;大于等于85小于80的数变为(85+80)./2;依次类推,还有很多这样的数,应该怎么写循环呀,谢谢,我自己写了几句,肯定不对,也让你看看吧!
y=;
ymin=95;
ymax=100;
if b=find((y>=ymin)&(y<ymax))
    y(b)=(ymax+ymin)./2;
else
    ymax=ymax-5;
    ymin=ymin-5;
end

ChaChing 发表于 2008-12-5 20:02

排成绩区段吗?
for 1F
for k=1:20, id=5*k; a(find(id-4<a & a<=id+1))=id; end
for 6F
for k=1:20, id=5*k; a(find(id-5<=a & a<id))=id-2.5; end

fanzhenjie 发表于 2008-12-5 21:21

回复 7楼 ChaChing 的帖子

不是呀,我就是想把一个数组进行一下平滑处理,就是想把很多点处理的平滑一些!不是排成绩区段呀,谢谢楼上的!

fanzhenjie 发表于 2008-12-5 23:03

回复 7楼 ChaChing 的帖子

谢谢楼上的,对了,我把这些数据处理后怎么才能显示出我处理后的数据呀,你看我写的哪里不对我,给我指点一下呀,谢谢!
a=;
for k=1:(a(1)-a(length(a)))./5, id=5*k;
    a(find(id-5<=a & a<id))=id-2.5;
end
b=a;
disp('重排数据:a');disp(b)

回忆的路上 发表于 2008-12-5 23:59

用find就可以
但是完了以后要把数据重排序

leeking30 发表于 2008-12-6 08:37

回复 8楼 fanzhenjie 的帖子

你都按照大小顺序排下来了,曲线肯定光滑啊? 搞不懂!
貌似循环程序还不好写 还要判断每次find出来的是不是空矩阵!自己试试吧!:lol

ChaChing 发表于 2008-12-6 09:13

回复 9楼 fanzhenjie 的帖子

a=; b=a;
for k=floor(min(a)/5):ceil(max(a)/5), id=5*k;
    a(find(id-5<=a & a<id))=id-2.5;
end


[ 本帖最后由 ChaChing 于 2008-12-6 09:22 编辑 ]
页: [1]
查看完整版本: 请教:一种处理数据的特殊方法!但不知道如何编程序?