楼主: xmuzd
16319 3

[程序分享] matlab缺失数据的简单插补 [推广有奖]

  • 3关注
  • 3粉丝

硕士生

36%

还不是VIP/贵宾

-

威望
0
论坛币
202 个
通用积分
4.8211
学术水平
22 点
热心指数
21 点
信用等级
20 点
经验
2459 点
帖子
126
精华
0
在线时间
162 小时
注册时间
2011-7-13
最后登录
2024-12-29

楼主
xmuzd 发表于 2015-5-16 19:59:52 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
        这几天需要分析股票数据,数据导入matlab后发现数据部分是‘- -’和0的元胞数组形式,想要将这些缺失的数据用相邻的最近两个数据求平均来代替,并且转换成一般矩阵格式,在网上找了N久,发现都木有现成的解决方法,只能自己动手,想了一天,觉都木有睡好有木有,泪崩。。。,七搞八搞个弄出来了,分享下成果,给那些被类似问题折磨的童鞋一点参考,也请大神们指点,看看有没有更方便的方法
程序如下:
  1. function  [result]=myin_polation(da)
  2. %线性插值,要求数据集da第一行和最后一行元素都不为零
  3. x=find(da==0);
  4. da_=da(:);
  5. [m,n]=size(da);
  6. for i=1:length(x)
  7.     da_(x(i))=(da_(mysubin_polation( x,x(i),1))+da_(mysubin_polation( x,x(i),2)))/2;
  8.     result=reshape(da_,m,n);
  9. end
  10. end
  11. function [ output] = mysubin_polation( x,k,option )
  12. if option==1
  13.     if ismember(k-1,x)==0
  14.         up=k-1;
  15.     else
  16.        up=mysubin_polation(x,k-1,1);
  17.     end
  18.     output=up;
  19. end
  20. if option==2
  21.     if ismember(k+1,x)==0
  22.         down=k+1;
  23.     else
  24.         down=mysubin_polation(x,k-1,2);
  25.     end
  26.     output=down;
  27. end     
  28. end
复制代码
程序中的da已经处理成了矩阵格式,为了方便处理,把‘- -’都转换成了0,处理方法很简单:
  1. da(cellfun(@ischar,da))={0};
  2. da=cell2mat(da);
复制代码


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:MATLAB atlab matla 缺失数据 Lab matlab

沙发
silencezou 学生认证  发表于 2015-5-19 15:57:32
学习,以后可能用得着

藤椅
G__HOST 发表于 2017-6-13 17:05:18
楼主大神  请问 如果前面数据都齐全   要补最后一行数值  该怎么办呢

板凳
yan517352676 发表于 2018-9-13 20:45:59
已经收藏了

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 22:56