技术标签: matlab Matlab从入门到开发
本章包含以下内容
通过数据导入和导出功能,可以从文件、其他应用程序、Web 服务和外部设备访问数据。可以读取常见文件格式,如 Excel电子表格、文本、图像、音频和视频,以及科学数据格式。通过一些低级的文件 I/O 函数,可以处理任何格式的数据文件。
主要包含以下格式的文件 :文本、电子表格、图像、科学数据、音频和视频、XML 文档
函数 | 功能 |
---|---|
readtable | 基于文件创建表 |
writetable | 将表写入文件 |
readtimetable | 基于文件创建时间表 |
writetimetable | 将时间表写入文件 |
函数 | 功能 |
---|---|
detectImportOptions | 基于文件内容生成导入选项 |
delimitedTextImportOptions | 为带分隔符的文本导入选项对象 |
fixedWidthImportOptions | 等宽文本文件的导入选项对象 |
getvaropts | 获取变量导入选项 |
setvaropts | 设置变量导入选项 |
setvartype | 设置变量数据类型 |
preview | 使用导入选项预览文件中的八行数据 |
函数 | 功能 |
---|---|
readmatrix | 从文件中读取矩阵 |
writematrix | 将矩阵写入文件 |
readcell | 从文件中读取元胞数组 |
writecell | 将元胞数组写入文件 |
readvars | 从文件中读取变量 |
textscan | 从文本文件或字符串读取格式化数据 |
type | 显示文件内容 |
fileread | 以文本格式读取文件内容 |
函数 | 功能 |
---|---|
tabularTextDatastore | 表格文本文件的数据存储 |
样本文件概述
样本文件 outages.csv 包含表示美国电力中断的数据。文件的前几行如下:
Region,OutageTime,Loss,Customers,RestorationTime,Cause
SouthWest,2002-01-20 11:49,672,2902379,2002-01-24 21:58,winter storm
SouthEast,2002-01-30 01:18,796,336436,2002-02-04 11:20,winter storm
SouthEast,2004-02-03 21:17,264.9,107083,2004-02-20 03:37,winter storm
West,2002-06-19 13:39,391.4,378990,2002-06-19 14:27,equipment fault
读取文本文件
使用 readtable 导入数据,并显示前五行。readtable 函数会自动检测分隔符和变量类型。
T = readtable('outages.csv');
head(T,5) % show first 5 rows of table
ans=5×6 table
Region OutageTime Loss Customers RestorationTime Cause
'SouthWest' 2002-02-01 12:18 458.98 1.8202e+06 2002-02-07 16:50 'winter storm'
'SouthEast' 2003-01-23 00:49 530.14 2.1204e+05 NaT 'winter storm'
'SouthEast' 2003-02-07 21:15 289.4 1.4294e+05 2003-02-17 08:14 'winter storm'
'West' 2004-04-06 05:44 434.81 3.4037e+05 2004-04-06 06:10 'equipment fault'
'MidWest' 2002-03-16 06:18 186.44 2.1275e+05 2002-03-18 23:23 'severe storm'
在导入之前指定变量数据类型根据文件中的变量类型,将变量数据类型更新为相应的 MATLAB 数据类型可能有益于数据。例如,outages.csv 中的第一列和第六列为分类列。通过将这两个列指定为 categorical 数组,可以运用 MATLAB 函数处理分类数据。要指定变量的数据类型,有如下方法可以选择:
指定 readtable 中的 Format 名称-值对组
设置文件导入选项的 VariableTypes 属性
使用 Format 名称-值对组指定变量的数据类型,读取数据,并显示前五行数据。在 formatSpec 设定符的 %{yyyy-MM-dd HH:mm}D 部分中,花括号之间的文本描述了日期和时间数据的格式。Format 中指定的值指定了:
文件中的第一列和最后一列为分类数据
第二列和第五列为格式化的日期和时间数据
第三列和第四列为浮点值
formatSpec = '%C%{yyyy-MM-dd HH:mm}D%f%f%{yyyy-MM-dd HH:mm}D%C';
T = readtable('outages.csv','Format',formatSpec);
head(T,5)
ans=5×6 table
Region OutageTime Loss Customers RestorationTime Cause
_________ ________________ ______ __________ ________________ _______________
SouthWest 2002-02-01 12:18 458.98 1.8202e+06 2002-02-07 16:50 winter storm
SouthEast 2003-01-23 00:49 530.14 2.1204e+05 NaT winter storm
SouthEast 2003-02-07 21:15 289.4 1.4294e+05 2003-02-17 08:14 winter storm
West 2004-04-06 05:44 434.81 3.4037e+05 2004-04-06 06:10 equipment fault
MidWest 2002-03-16 06:18 186.44 2.1275e+05 2002-03-18 23:23 severe storm
或者,通过使用导入选项的 setvartype 函数,指定变量的数据类型。首先,为文件创建一个导入选项对象。数据文件包含了不同类型的变量。指定第一个和最后一个变量为 categorical 数组,第二个和第五个变量为 datetime 数组,剩余变量为 double。
opts = detectImportOptions('outages.csv');
varNames = opts.VariableNames ; % variable names
varTypes = {
'categorical','datetime','double',...
'double','datetime','categorical'};
opts = setvartype(opts,varNames,varTypes);
将 readtable 与 opts 配合使用以导入数据,然后显示前五行。
T = readtable('outages.csv',opts);
head(T,5)
ans=5×6 table
Region OutageTime Loss Customers RestorationTime Cause
_________ ____________________ ______ __________ ____________________ _______________
SouthWest 01-Feb-2002 12:18:00 458.98 1.8202e+06 07-Feb-2002 16:50:00 winter storm
SouthEast 23-Jan-2003 00:49:00 530.14 2.1204e+05 NaT winter storm
SouthEast 07-Feb-2003 21:15:00 289.4 1.4294e+05 17-Feb-2003 08:14:00 winter storm
West 06-Apr-2004 05:44:00 434.81 3.4037e+05 06-Apr-2004 06:10:00 equipment fault
MidWest 16-Mar-2002 06:18:00 186.44 2.1275e+05 18-Mar-2002 23:23:00 severe storm
将新变量追加到表中
表 T 中包含了 OutageTime 和 RestorationTime。计算每次电力中断的持续时间并将此数据追加到表中。
T.Duration = T.RestorationTime - T.OutageTime;
head(T,5)
ans=5×7 table
Region OutageTime Loss Customers RestorationTime Cause Duration
_________ ____________________ ______ __________ ____________________ _______________ _________
SouthWest 01-Feb-2002 12:18:00 458.98 1.8202e+06 07-Feb-2002 16:50:00 winter storm 148:32:00
SouthEast 23-Jan-2003 00:49:00 530.14 2.1204e+05 NaT winter storm NaN
SouthEast 07-Feb-2003 21:15:00 289.4 1.4294e+05 17-Feb-2003 08:14:00 winter storm 226:59:00
West 06-Apr-2004 05:44:00 434.81 3.4037e+05 06-Apr-2004 06:10:00 equipment fault 00:26:00
MidWest 16-Mar-2002 06:18:00 186.44 2.1275e+05 18-Mar-2002 23:23:00 severe storm 65:05:00
将表、元胞数组或数值数组中包含的表格数据从 MATLAB 工作区导出到文本文件。
可使用 writetable 函数将表格数据从 MATLAB 工作区导出到文本文件。创建样本表,将表写入文本文件,然后指定更多选项并再次将表写入文本文件。
创建包含变量 Pitch、Shape、Price 和 Stock 的样本表 T。
Pitch = [0.7;0.8;1;1.25;1.5];
Shape = {
'Pan';'Round';'Button';'Pan';'Round'};
Price = [10.0;13.59;10.50;12.00;16.69];
Stock = [376;502;465;1091;562];
T = table(Pitch,Shape,Price,Stock)
T=5×4 table
Pitch Shape Price Stock
_____ ________ _____ _____
0.7 'Pan' 10 376
0.8 'Round' 13.59 502
1 'Button' 10.5 465
1.25 'Pan' 12 1091
1.5 'Round' 16.69 562
将表 T 导出到一个名为 tabledata.txt 的文本文件。查看文件的内容。默认情况下,writetable 会写入逗号分隔的数据,将表变量名称作为列标题。
writetable(T,'tabledata.txt');
type tabledata.txt
Pitch,Shape,Price,Stock
0.7,Pan,10,376
0.8,Round,13.59,502
1,Button,10.5,465
1.25,Pan,12,1091
1.5,Round,16.69,562
创建表 T2,使用 RowNames 名称-值对组参数指定行名称。
rowNames = {
'M4';'M5';'M6';'M8';'M10'};
T2 = table(Pitch,Shape,Price,Stock,'RowNames',rowNames)
T2=5×4 table
Pitch Shape Price Stock
_____ ________ _____ _____
M4 0.7 'Pan' 10 376
M5 0.8 'Round' 13.59 502
M6 1 'Button' 10.5 465
M8 1.25 'Pan' 12 1091
M10 1.5 'Round' 16.69 562
将 T2 导出到名为 tabledata2.txt 并以制表符分隔的文本文件。使用 Delimiter 名称-值对组参数指定制表符分隔符,并使用 WriteRowNames 名称-值对组参数以包括行名称。查看文件的内容。
writetable(T2,'tabledata2.txt','Delimiter','\t','WriteRowNames',true);
type tabledata2.txt
Row Pitch Shape Price Stock
M4 0.7 Pan 10 376
M5 0.8 Round 13.59 502
M6 1 Button 10.5 465
M8 1.25 Pan 12 1091
M10 1.5 Round 16.69 562
将元胞数组导出到文本文件
打开实时脚本
可采用以下方法之一,将元胞数组从 MATLAB 工作区导出到文本文件:
使用 writecell 函数将元胞数组导出到文本文件。
通过指定输出数据的格式,使用 fprintf 导出元胞数组。
创建样本元胞数组 C。
C = {
'Atkins',32,77.3,'M';'Cheng',30,99.8,'F';'Lam',31,80.2,'M'}
C = 3×4 cell array
{
'Atkins'} {
[32]} {
[77.3000]} {
'M'}
{
'Cheng' } {
[30]} {
[99.8000]} {
'F'}
{
'Lam' } {
[31]} {
[80.2000]} {
'M'}
使用 writecell 导出元胞数组。
writecell(C,'data.dat')
查看文件的内容。
type data.dat
Atkins,32,77.3,M
Cheng,30,99.8,F
Lam,31,80.2,M
或者,使用 fprintf 导入元胞数组。打开一个可供写入的名为 celldata.dat 的文件。使用格式设定符定义 formatSpec,以描述文件中的数据模式。典型的格式设定符包括:表示字符向量的 ‘%s’,表示整数的 ‘%d’ 或者表示浮点数的 ‘%f’。使用空格分隔每个格式设定符,以指示对输出文件使用空格分隔符。在每行数据的末尾包括换行符 (’\n’)。
fileID = fopen('celldata.dat','w');
formatSpec = '%s %d %2.1f %s\n';
确定 C 的大小,并使用 fprintf 函数一次导出一行数据。然后关闭文件。fprintf 将写入一个空格分隔的文件。
[nrows,ncols] = size(C);
for row = 1:nrows
fprintf(fileID,formatSpec,C{
row,:});
end
fclose(fileID);
查看文件的内容。
type celldata.dat
Atkins 32 77.3 M
Cheng 30 99.8 F
Lam 31 80.2 M
将数值数组导出到文本文件
打开实时脚本
可使用 writematrix 将数值数组导出到文本文件。
创建数值数组 A。
A = magic(5)/10
A = 5×5
1.7000 2.4000 0.1000 0.8000 1.5000
2.3000 0.5000 0.7000 1.4000 1.6000
0.4000 0.6000 1.3000 2.0000 2.2000
1.0000 1.2000 1.9000 2.1000 0.3000
1.1000 1.8000 2.5000 0.2000 0.9000
将该数值数组写入到 myData.dat,并将分隔符指定为 ‘;’。然后,查看文件的内容。
writematrix(A,'myData.dat','Delimiter',';')
type myData.dat
1.7;2.4;0.1;0.8;1.5
2.3;0.5;0.7;1.4;1.6
0.4;0.6;1.3;2;2.2
1;1.2;1.9;2.1;0.3
1.1;1.8;2.5;0.2;0.9
文章浏览阅读2.1w次。b站解除港澳台限制油猴脚本 无法授权 找不到IP地址可以的话请跳过这段废话问题描述解决方案可以的话请跳过这段废话作为一个总是看些奇怪动画片的阿宅,睿站的视频码率虽然差,但是胜在方便。这个脚本过于伟大。而且它适用于海外用户。脚本如何安装请看这里但是这个脚本总是喜欢抽风,这次在前人的提示和自己的尝试之下,成功解决问题。本着我为人人,人人为我的原则,特地把方法写在这里,让百度也搜到。不保证通用,仅解决了我遇到的这次问题。问题描述本次抽风在于,无法观看番剧区动画(原因应该是我的ip在11区)以及b站国_解除b站区域限制账号授权失败
文章浏览阅读426次。 void assert(int expression); Macro used for internal error detection. (Ignored if NDEBUG_bf-numofsignificantdigitsafterdecimalpoint
文章浏览阅读1.5w次。项目中使用TS提示报错类型“string | null”的参数不能赋给类型“string”的参数。 不能将类型“null”分配给类型“string”解决方法_ts 怎么把string|null 赋值string
文章浏览阅读7.4k次,点赞2次,收藏6次。public class T0301{ public static void main(String args []){ for(int i = 1; i <= 10000;i ++){ int a,b,c,d; a = i%10; b = i/10%10; c = i/10/1_10000以内的水仙花数
文章浏览阅读3.4k次。静态的类或者方法只能访问静态成员!_内部类可以引用它的包含类(外部类)的成员吗?有没有什么限制
文章浏览阅读889次。@Resource(JSR-250标准注解,推荐使用它来代替Spring专有的@Autowired注解) Spring 不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource、@PostConstruct以及@PreDestroy。 @Resource的作用相当于@Autowired,只不过@A_spring如何使用annotation注册的resource实现类
文章浏览阅读8.1k次,点赞5次,收藏37次。2018年是NLP领域巨变的一年,这个好像我们都知道,但是究竟是哪里剧变了,哪里突破了?经常听大佬们若无其事地抛出一些高级的概念,你却插不上嘴,隐隐约约知道有这么个东西,刚要开口:噢!你说bert啊,我知道,就是一个预训练模型,然后,然后。。。然后就没有然后了,若是在面试场上,你三秒钟就结束了考官的提问,那尴尬的考官估计只能以你太快的理由拒绝给你发offer。好的,闲话少说,我们来总结一下这么..._transformer elmo gpt bert gpt-2
文章浏览阅读286次。typora使用pandoc_pandoc安装后怎么和typora连上
文章浏览阅读497次。啦啦啦啦啦我又嚟啦~今日讲下数据挖掘常见嘅技术以及应用,并不全面,大家求其睇下就好啦哈哈哈。数据挖掘技术,在实际的应用中,主要就体现在4个方面:分类与回归,聚类,关联规则..._sas eg使用分类模型
文章浏览阅读1.5k次。导航1.自定义样式圆形进度条1.1xml布局文件1.2自定义样式文件1.3效果图2.自定义横向进度条2.1xml布局文件2.2自定义样式文件2.3效果图3.动态显示进度条进度4.坑1.自定义样式圆形进度条1.1xml布局文件<ProgressBar android:id="@+id/proBarYuan" android:layout_width="50dp" android:layout_height="50dp" style="@style/Widget.AppCompat.Prog_android自定义progressbar的style
文章浏览阅读5k次。阅读本文大概需要4分钟很多初学者刚开始学python的时候,一定都遇到过这个问题,python的世界有2个版本,python2 和 python3 ,而且有些语法还不兼容.怎么办~~到底应该选择哪个版本来开发呢?好,今天我们就来聊聊这个话题.1.Python2和Python3的历史背景 Python语言是在20世纪90年代诞生的,算算到现在已经是25岁的大叔级的语言了(跟它同一个时代的还有一个鼎鼎_python2 python3 指定版本
文章浏览阅读1.3w次,点赞7次,收藏58次。最短路径四种算法1234FloydDijkstraBellman-Ford队列优化的Bellman-Ford一,只有四行的算法——Floyd-Warshall假设求顶点ViViVi到VjVjVj的最短路径。弗洛伊德算法依次找从ViViVi到VjVjVj,中间经过结点序号不大于000的最短路径,不大于111的最短路径,…直到中间顶点序号不大于n−1n-1n−1..._最短路径算法