声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1297|回复: 11

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

[复制链接]
发表于 2008-12-4 22:18 | 显示全部楼层 |阅读模式

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

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

x
假设我有一列从大到小的数据矩阵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 编辑 ]
回复
分享到:

使用道具 举报

发表于 2008-12-5 04:28 | 显示全部楼层
a(1,1:n)=ones(1,n)*100
依此类推
如果很长,就写个循环吧
发表于 2008-12-5 07:50 | 显示全部楼层
最好是些个循环了
发表于 2008-12-5 07:56 | 显示全部楼层
Help find

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

评分

1

查看全部评分

 楼主| 发表于 2008-12-5 16:01 | 显示全部楼层

回复 地板 ChaChing 的帖子

谢谢,请问怎么写个循环呀?
 楼主| 发表于 2008-12-5 16:39 | 显示全部楼层

回复 地板 ChaChing 的帖子

假设我现在想这样排列这些数据,这样应该简单些,一个数组Y存放着许多数,最大数为100,我就想把其中大于等于95小于100的数变为(95+100)./2;大于等于90小于95的数变为(90+95)./2;大于等于85小于80的数变为(85+80)./2;依次类推,还有很多这样的数,应该怎么写循环呀,谢谢,我自己写了几句,肯定不对,也让你看看吧!
y=[100,99,98.4,96,95.3,94,92.5,91,90,89.4,86,85.4,85.2,84.3,8281.2,80.3,79,76,74,73];
ymin=95;
ymax=100;
if b=find((y>=ymin)&(y<ymax))
    y(b)=(ymax+ymin)./2;
else
    ymax=ymax-5;
    ymin=ymin-5;
end
发表于 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
 楼主| 发表于 2008-12-5 21:21 | 显示全部楼层

回复 7楼 ChaChing 的帖子

不是呀,我就是想把一个数组进行一下平滑处理,就是想把很多点处理的平滑一些!不是排成绩区段呀,谢谢楼上的!
 楼主| 发表于 2008-12-5 23:03 | 显示全部楼层

回复 7楼 ChaChing 的帖子

谢谢楼上的,对了,我把这些数据处理后怎么才能显示出我处理后的数据呀,你看我写的哪里不对我,给我指点一下呀,谢谢!
a=[100,99,98.4,96,95.3,94,92.5,91,90,89.4,86,85.4,85.2,84.3,82];
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就可以
但是完了以后要把数据重排序
发表于 2008-12-6 08:37 | 显示全部楼层

回复 8楼 fanzhenjie 的帖子

你都按照大小顺序排下来了,曲线肯定光滑啊? 搞不懂!
貌似循环程序还不好写 还要判断每次find出来的是不是空矩阵!自己试试吧!:lol
发表于 2008-12-6 09:13 | 显示全部楼层

回复 9楼 fanzhenjie 的帖子

a=[100,99,98.4,96,95.3,94,92.5,91,90,89.4,86,85.4,85.2,84.3,82]; 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
[b;a]

[ 本帖最后由 ChaChing 于 2008-12-6 09:22 编辑 ]
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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