24小时热门版块排行榜    

查看: 3046  |  回复: 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的回帖

Op_liu

木虫 (正式写手)


引用回帖:
55楼: Originally posted by 花儿为你开 at 2015-12-05 19:01:21
Matlab安装包有吗,我不会安装

有,建议去matlab贴吧下,有配套教程的,按照步骤一步步来就行,不难

发自小木虫Android客户端
56楼2015-12-05 21:46:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Op_liu

木虫 (正式写手)


引用回帖:
55楼: Originally posted by 花儿为你开 at 2015-12-05 19:01:21
Matlab安装包有吗,我不会安装

实在没有,我再给你发

发自小木虫Android客户端
57楼2015-12-05 21:50:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Op_liu

木虫 (正式写手)


引用回帖:
60楼: Originally posted by osd1888 at 2015-12-07 06:43:44

谢谢支持

发自小木虫Android客户端
61楼2015-12-07 08:46:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Op_liu

木虫 (正式写手)


引用回帖:
62楼: Originally posted by 日月之行 at 2015-12-07 18:06:32
谢谢!

一起学习

发自小木虫Android客户端
63楼2015-12-07 21:47:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Op_liu

木虫 (正式写手)


引用回帖:
65楼: Originally posted by 欣颀嘉瑜 at 2015-12-09 21:21:40

...

三克油~

发自小木虫Android客户端
66楼2015-12-09 23:41:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Op_liu

木虫 (正式写手)


引用回帖:
69楼: Originally posted by springkite at 2016-01-19 14:55:45
总结得很好

谢谢

发自小木虫Android客户端
70楼2016-01-19 18:17:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 Op_liu 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] F口信息学部拿面上,大概需要什么样的成果 +3 _奋黎_ 2024-06-16 3/150 2024-06-16 15:38 by 我是王小帅
[找工作] 成都产品质量检测研究院 200+3 鲸鱼663 2024-06-11 9/450 2024-06-16 10:08 by SNaiL1995
[基金申请] 博士后创新人才支持计划公示 +9 aishida144 2024-06-14 15/750 2024-06-16 09:52 by msjy
[考博] 34岁读博士晚吗 +26 emitdne 2024-06-13 26/1300 2024-06-16 07:16 by liyeqik
[找工作] 江西双非一本和四川双一流高校如何选择? 5+7 寒山敲钟 2024-06-12 23/1150 2024-06-16 06:52 by puterde
[基金申请] 关于博后基金的bug问题 +6 lxr1991 2024-06-14 9/450 2024-06-15 21:17 by since—2010
[考博] 上海交大招收材料化学方向科研助理/“申请考核”博士(请勿回复帖子或站内投条) +3 灵梦and紫 2024-06-12 4/200 2024-06-15 20:58 by 1822836277
[教师之家] 我们学院常年位居 各学院 倒数第二。专业撤销的话,在编者有什么补偿? +13 河西夜郎 2024-06-09 14/700 2024-06-15 19:44 by LittleBush
[基金申请] BO4的YQ答辩通知发布了吗? +6 博学笃行 2024-06-11 6/300 2024-06-15 16:04 by 悲催科研狗
[基金申请] 为什么我的博后基金还在流动站审核中?不会是学院给我卡了吧? +14 王凯12 2024-06-13 26/1300 2024-06-15 15:22 by 好人与坏人
[基金申请] 有没有机械的前辈分享一下评上海优都是什么成果啊 +7 wulala800 2024-06-10 7/350 2024-06-15 09:33 by 晓目崇
[考研] 物理化学一对一辅导 +3 林大diao 2024-06-12 5/250 2024-06-14 20:57 by 林大diao
[基金申请] 化学会年会改成一年开一次了? +5 babu2015 2024-06-12 13/650 2024-06-14 10:46 by babu2015
[基金申请] 75批博后基金 +10 kyukitu 2024-06-13 13/650 2024-06-14 10:31 by kyukitu
[论文投稿] 投稿后发现其他作者的邮箱填错了该怎么办呀 10+4 在飞的猪 2024-06-13 6/300 2024-06-14 04:45 by 小虫子咔咔
[硕博家园] 科研求助 +5 杲www 2024-06-12 6/300 2024-06-13 16:16 by 姓李名明
[硕博家园] 机械研究生如何拿到年薪40+w +13 阿巴阿巴哦哦 2024-06-11 15/750 2024-06-13 15:40 by 113745685
[论文投稿] with editor日期变更 +3 慎独的小花卷 2024-06-12 8/400 2024-06-13 11:00 by 慎独的小花卷
[基金申请] 博后特助这周出结果吗?往年都是啥时候啊? +13 jsqy 2024-06-12 17/850 2024-06-12 19:55 by Lynn212
[教师之家] 公办双非,学生论文升学就业都不行。一本大学的论文升学就业没问题吧? +5 河西夜郎 2024-06-09 5/250 2024-06-10 17:59 by yyallen2003
信息提示
请填处理意见