24小时热门版块排行榜    

查看: 3017  |  回复: 75

Op_liu

木虫 (正式写手)


[交流] 自学MATLAB(数据提取)

数据提取往往是写程序的第一步,这里我主要总结了文本的数据(中英字符+数字)提取,并简单介绍一下excel、图片、视频的读入函数;
每个函数我都会举一些比较有代表性的例子,尽量写的通俗易懂,手机看的话可能会有排版问题,见谅;
每个函数都有很多使用细节,这里只举主要参数,其他参数可以看该函数的doc或者我上一个帖子分享的两本书http://muchong.com/bbs/viewthread.php?tid=9708948
总结不到位或者错漏欢迎指正,大家一起学习,还有金币拿~

1、读取文本数据(格式一般为txt、mat、dat);下面各函数强大程度按顺序增加(主观排序,具体问题具体分析);
1)load(filename),适用类型:文本时纯数字数据,而且各行列数相等(每一行数据个数相等,下面不再解释);
     如1 2 3 OK;
     若L 2 3 NO;(有英文字符);
     如1 2 3
         4 5 6 OK;
     若1 2
         4 5 6 NO;(各行列数不相等);
2)csvread(filename),适用类型:文本是纯数字数据,而且数据间用逗号隔开;与load相比进步在:若每行数据个数不等,少的会自动补充为0;
      如1,2,3 OK;
      若1 2 3 NO;(间隔不是逗号);
      若L,2,3 NO;(有英文字符);
      如1,2,3
          4,5   OK;(会输出[1 2 3;4 5 0]的矩阵);
3)dlmread(filename,delimiter),适用类型:文本是纯数字数据;与csvread相比进步在:对间隔符没有相求,delimiter用来指定间隔符(下面有说);
      如1 2 3 OK;
      如1,2,3 OK;
      文本中依然不能出现中英字符,不再举例;
接下来介绍两个比较高级的函数,这两个函数使用起来参数要求很严格,开始用容易出错,熟练使用可以解决很多问题;
4)[a b c d]=textread(filename,format,'delimiter',',','headerlines',2),适用类型:使用得当可以处理大部分文本(中英字符+数字数据);
     filename文件名;
     format指数据格式,%s字符;%d整数;%g浮点数,个数要与输出相等,比如'%s%d%g'有3个,那么输出一定是[a,b,c]也是3个,保证一致;
    (详细可看help textread;或者看我上一个帖子推荐的书《MATLAB编程第二版》http://muchong.com/bbs/viewthread.php?tid=9708948);
     delimiter设置分隔符,如''表示空格,','表示逗号;
     headerlines设置读取数据的起始行,2代表从第三行开始读;(0,1,2所以是第三行)
注:textread是将数据一列列读取的,所以对于处理各行列数相等的文本比较有优势;
5)C=textscan(fid,format),适用类型:与textread类似,区别是textscan将结果保存到C这个单元数组(cell);
     fid:仔细的同学可以看出其他函数都是filename,只有textscan不一样,所以用textscan函数之前要用fid=fopen(filename);
     format,delimiter,headerlines使用方法与textscan一致;
举一个很经典的例子,下面是一个17*8的矩阵(需要提取右边14*6的数据矩阵),‘1.txt’文本如下
  5 jhg jy jyg jh kjh jh kjh
yuyu yu yt uyt uyt uyt uyt uyt  
fh jhg jy jyg jh kjh jh kjh  
kjh kjh 56 56 21 654 54 354  
jh jh 54 6456 654 46 5 21  
kjh kjh 12 56 54 -562 21 21  
kjh kjh 321 412 654 54 4 23  
kjh kjh 646 545 1254 54 21 1  
kjh kjh 4 545 632 1 38 32
kjh kjh 21 3 -15 6554 55 63
kjh kjh 21 21 1 13107 3 94
kjh kjh 5 21 2 19660 45 125  
kjh kjh 1 3 3 26213 52423 156
kjh kjh -639 -15 4 2 0 187
kjh kjh -319 2 21 21 21 218
kjh kjh 1 2 21 23 25 249
kjh kjh 321 321 21 23 25 280
方法一:(这是网上一个帖子的解法,用的textscan,http://www.cnblogs.com/ShaneZhang/archive/2013/05/20/3088834.html,下面我还会给一个非常简单的方法)
clc;clear;close all;   
hang=[4 17];%4行到17行。这样你也可以变化  
lie=[3 8];%3到8列。这样你也可以变化   
[FileName,PathName] = uigetfile('*.txt','Select the Txt files');%弹出对话框,然后选择你要处理的文件  
fid=fopen([PathName FileName]);%载入文件
temp=textscan(fid,'%s %s %s %s %s %s %s %s');  %将文本读取到temp这个单元矩阵(1*8cell,因为是8列);
fclose(fid);  
for i=1hang(2)-hang(1)+1) %这个循环就是从temp单元矩阵中把数据分出来;   
  for j=1lie(2)-lie(1)+1)         
   b=temp{j+lie(1)-1}{i+hang(1)-1};         
   A(i,j)=str2num(b); %14*6的数据矩阵放入A中;   
  end  
end
注:textread和textscan都是按列读取数据;功能强大但是需熟悉函数用法;
6)importdata(filename)【个人认为很强大很简便的一个函数】
     使用类型:文本可以是中英字符+数字数据,各行列数相等;(需要提取的数据最好在一块)
还是刚才的例子,17*8的文本中提取14*6的数据矩阵(假设文件名'1.txt');
方法二:直接用A=importdata('1.txt');得到的A.data就是需要提取的14*6的数据矩阵(一句话就搞定了,是不是很简单)
********************************************************************************************
总结:提取文本的函数主要就这些,使用时还得具体问题具体分析,下面提供一个简单思路;
*纯数据:load,csvread,dlmread,importdata;
*中文字符加数据(各行列数相等,目标数据在一块):importdata;
*中文字符加数据(内容复杂,输出要求较高):textread,textscan;
*中文字符加数据(特别复杂):引入strcmp等函数进行判断筛选;
附件给了一个很经典的例子(2007年的数模题,对数据提取要求很高,我把程序调试了一下,有兴趣的可以看看)

2、excel数据提取;
A= xlsread(filename,sheet,range);
sheet选定工作表;range选定读取行列数;

3、图片数据提取;
A=imread(filename);%imread可将图片直接读取成数据;
imshow(filename);%可直接显示出图片,也可将filename换成数组;

4、视频数据提取;
obj=VideoReader(filename);%提取视频,能处理大部分视频格式(如avi,wmv,mp4,mpg,mov等)
下面举一个例子(改程序):
obj=VideoReader('MVI_0703.MOV');
numframes=obj.NumberofFrames;
for k=150:200 %提取第四秒
    frame=read(obj,k);
    imwrite(frame,strcat(int2str(k),'.jpg'),'jpg');%保存为jpg格式照片
end
这个程序将视频MVI_0703.MOV读取出来,因为视频其实就是许多帧图片合在一起,假设每秒50帧,这里将第4秒(150-200)视频转化成图片保存下来;

再给大家推荐两个网址:
http://www.ilovematlab.cn/thread-872-1-1.html
http://www.cnblogs.com/ShaneZhang/archive/2013/05/20/3088834.html
这两个帖子是网上找的,都是讲文本数据提取的,讲的比我专业;希望大家一起进步。
回复此楼

» 本帖附件资源列表

  • 欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
    本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:libolin3@tal.com
  • 附件 1 : chengxu.rar
  • 2015-12-05 13:27:22, 36.17 K

» 收录本帖的淘贴专辑推荐

matlab典型案例及小技巧 程序语言箱 Matlab

» 本帖已获得的红花(最新10朵)

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

» 抢金币啦!回帖就可以得到:

查看全部散金贴

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Op_liu

木虫 (正式写手)


2楼2015-12-05 13:37:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
简单回复
leixiangy3楼
2015-12-05 13:47   回复  
Op_liu(金币+1): 谢谢参与
fengzuoy4楼
2015-12-05 13:47   回复  
Op_liu(金币+1): 谢谢参与
piaozhoup5楼
2015-12-05 13:48   回复  
Op_liu(金币+1): 谢谢参与
祝福
ningkongt6楼
2015-12-05 13:48   回复  
Op_liu(金币+1): 谢谢参与
lengshuk7楼
2015-12-05 13:48   回复  
Op_liu(金币+1): 谢谢参与
祝福
rongtianv8楼
2015-12-05 13:48   回复  
Op_liu(金币+1): 谢谢参与
祝福
linwangu9楼
2015-12-05 13:48   回复  
Op_liu(金币+1): 谢谢参与
祝福
huhuib10楼
2015-12-05 13:48   回复  
Op_liu(金币+1): 谢谢参与
祝福
2015-12-05 13:48   回复  
Op_liu(金币+1): 谢谢参与
发自小木虫Android客户端
2015-12-05 13:52   回复  
Op_liu(金币+1): 谢谢参与
发自小木虫Android客户端
qingxuanf13楼
2015-12-05 13:53   回复  
Op_liu(金币+1): 谢谢参与
xly12398714楼
2015-12-05 13:53   回复  
Op_liu(金币+1): 谢谢参与
tanmingp15楼
2015-12-05 13:53   回复  
Op_liu(金币+1): 谢谢参与
2015-12-05 13:54   回复  
Op_liu(金币+1): 谢谢参与
祝福 发自小木虫Android客户端
nixinj17楼
2015-12-05 13:54   回复  
Op_liu(金币+1): 谢谢参与
yanshuk18楼
2015-12-05 13:54   回复  
Op_liu(金币+1): 谢谢参与
祝福
qingyueh19楼
2015-12-05 13:54   回复  
Op_liu(金币+1): 谢谢参与
lanjiant20楼
2015-12-05 13:55   回复  
Op_liu(金币+1): 谢谢参与
支持
shixinj21楼
2015-12-05 13:55   回复  
Op_liu(金币+1): 谢谢参与
lanyatianv22楼
2015-12-05 13:56   回复  
Op_liu(金币+1): 谢谢参与
wanghuap23楼
2015-12-05 13:56   回复  
Op_liu(金币+1): 谢谢参与
yongxiny24楼
2015-12-05 13:56   回复  
Op_liu(金币+1): 谢谢参与
祝福
chaolingb25楼
2015-12-05 13:56   回复  
Op_liu(金币+1): 谢谢参与
jiaxiaojx26楼
2015-12-05 13:56   回复  
Op_liu(金币+1): 谢谢参与
qingyujg27楼
2015-12-05 13:57   回复  
Op_liu(金币+1): 谢谢参与
dmbb28楼
2015-12-05 13:57   回复  
Op_liu(金币+1): 谢谢参与
lileivc29楼
2015-12-05 13:57   回复  
Op_liu(金币+1): 谢谢参与
祝福
zhangluntr30楼
2015-12-05 13:57   回复  
Op_liu(金币+1): 谢谢参与
haiyoum31楼
2015-12-05 13:57   回复  
Op_liu(金币+1): 谢谢参与
祝福
yangguaiw32楼
2015-12-05 13:57   回复  
Op_liu(金币+1): 谢谢参与
祝福
wangtingh33楼
2015-12-05 13:57   回复  
Op_liu(金币+1): 谢谢参与
liuhant34楼
2015-12-05 13:57   回复  
Op_liu(金币+1): 谢谢参与
xiaowanglm35楼
2015-12-05 13:57   回复  
Op_liu(金币+1): 谢谢参与
chenhuac36楼
2015-12-05 13:57   回复  
Op_liu(金币+1): 谢谢参与
祝福
yuexinw37楼
2015-12-05 13:58   回复  
Op_liu(金币+1): 谢谢参与
祝福
xingyuanp38楼
2015-12-05 13:58   回复  
Op_liu(金币+1): 谢谢参与
wulongh39楼
2015-12-05 13:59   回复  
Op_liu(金币+1): 谢谢参与
nono200940楼
2015-12-05 13:59   回复  
Op_liu(金币+1): 谢谢参与
·
chenchenyf41楼
2015-12-05 14:03   回复  
Op_liu(金币+1): 谢谢参与
guoxintc42楼
2015-12-05 14:03   回复  
Op_liu(金币+1): 谢谢参与
祝福
duojueb43楼
2015-12-05 14:03   回复  
Op_liu(金币+1): 谢谢参与
支持
luotangh44楼
2015-12-05 14:04   回复  
Op_liu(金币+1): 谢谢参与
祝福
xiejiaf45楼
2015-12-05 14:04   回复  
Op_liu(金币+1): 谢谢参与
祝福
nieliangl46楼
2015-12-05 14:04   回复  
Op_liu(金币+1): 谢谢参与
chennianl47楼
2015-12-05 14:04   回复  
Op_liu(金币+1): 谢谢参与
祝福
fengyingm48楼
2015-12-05 14:04   回复  
Op_liu(金币+1): 谢谢参与
wenxiaoz49楼
2015-12-05 14:05   回复  
Op_liu(金币+1): 谢谢参与
meifangy50楼
2015-12-05 14:06   回复  
Op_liu(金币+1): 谢谢参与
祝福
相关版块跳转 我要订阅楼主 Op_liu 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 连续3年国社科青年本子都没中,今年最后一次青年了,写本子完全浪费时间 +10 ddkk3000 2024-05-15 15/750 2024-05-18 01:38 by ddkk3000
[硕博家园] 又见奇葩学生,可咋办 +3 appleapple2 2024-05-17 7/350 2024-05-18 00:07 by appleapple2
[基金申请] 申请基金代表性成果 +10 lancet0903 2024-05-17 10/500 2024-05-17 21:02 by lch2012
[考博] 想被211以上高校课题组接收 +7 风起沧澜 2024-05-16 9/450 2024-05-17 16:39 by zhaojiang427
[硕博家园] 海外博士,国内博后找工作求建议 +7 905452934 2024-05-16 17/850 2024-05-17 12:41 by 905452934
[论文投稿] 求期刊推荐 30+3 jxhx666666 2024-05-15 4/200 2024-05-16 22:47 by nono2009
[考博] 24应届生寻博导 +3 8139173 2024-05-15 4/200 2024-05-16 21:09 by 不容易456
[基金申请] 网传南京林业大学加拿大博士首聘期不合格,自杀 +26 babu2015 2024-05-12 35/1750 2024-05-16 19:28 by danisha
[论文投稿] 中文投稿 +6 liujinyu80 2024-05-13 6/300 2024-05-16 15:57 by 晓目崇
[基金申请] 粗大,科研之友提示有一篇10多年前的文章被阅读 +9 babu2015 2024-05-16 11/550 2024-05-16 14:53 by TsolmonZ
[教师之家] 谁要做个人网站,可以交流啊! +10 hjc404 2024-05-14 27/1350 2024-05-16 13:39 by hjc404
[分析] 液相色谱基线上移 5+3 江上鸢飞 2024-05-13 3/150 2024-05-16 11:49 by gwmgyp
[教师之家] 学生家长私下联系老师修改成绩不成,唆使19名学生联名要求复核成绩 +23 sjtu2012 2024-05-11 26/1300 2024-05-16 07:57 by zhangysbad
[教师之家] 加上“青年”两个字,意义就变了 +10 zylfront 2024-05-13 13/650 2024-05-15 23:36 by flasheagle
[教师之家] 问题已解觉,谢谢大家关注! +7 lzgj258 2024-05-15 11/550 2024-05-15 19:15 by 环境检测2024
[硕博家园] 导师这样说到底有没有机会啊……… +7 理科生yes 2024-05-14 14/700 2024-05-15 18:45 by 理科生yes
[基金申请] 评审规则突发奇想 +18 平凡冰雪花 2024-05-13 23/1150 2024-05-15 15:54 by 平凡冰雪花
[基金申请] F06送审了吗? +5 昂首走 2024-05-11 9/450 2024-05-15 06:53 by yp_nupt
[基金申请] 2024工材口的国自然开始涵评了吗? +3 Thanks1989 2024-05-13 3/150 2024-05-14 22:27 by weiyongscut
[基金申请] 科研之友老是给我发消息 +6 问君611 2024-05-11 8/400 2024-05-12 17:24 by 淀粉搬运工
信息提示
请填处理意见