【台大郭彦甫】Matlab入门教程超详细学习笔记四:数据类型与文件读写(附PPT链接)
变量类型与文件读写
- 前言
- 一、变量类型
- 1.numeric(数值类型)
- 2.char(字符类型)
- 3.string(字符串类型)
- 4.structure(结构体)
- 5.cell(元胞数组)
- 5.高维数组
- 6.判断变量数据类型的函数
- 二、文件读写
- 1.save() 和 load()
- 2.读写Excel表格
- 3.低阶文件处理 I/O 函数
- 总结
前言
【台大郭彦甫】PPT链接:https://pan.baidu.com/s/1VXdy3HCBPexMK0csyehiZA 提取码:2io1
matlab官方帮助文档:https://ww2.mathworks.cn/help/
一、变量类型
主要变量类型如下:
1.numeric(数值类型)
- 对于 int 需要显示指出位数,没有普通的 int ,对于 float ,对应matlab中的是 single;
- 默认情况下,matlab 将所有数值型的数据都存储为 double;如果希望以其他类型存储,需要显示指出:x = int32(4);
- 事实上,类似上述 int32() 这样显示指出类型本质上是一个函数,将数据类型转换;
2.char(字符类型)
- x = ‘c’ 像这样用单引号括起来一个字符,即为 char 类型
- 标准ASCII字符可以被转换为对应的ASCII码.
>> s1 = 'h'
whos
uint16(s1)
s1 ='h'Name Size Bytes Class Attributess1 1x1 2 char
ans =uint16104
>> s1 = 'bet'
whos
Name Size Bytes Class Attributesans 1x1 2 uint16 s1 1x3 6 char
3.string(字符串类型)
字符串实际上是字符 array
- 可对其进行矩阵操作:
s1 = 'Example';
s2 = 'String';
- [s1 s2] 直接将两个字符串相连;
>> s3 = [s1 s2];
>> s3s3 ='ExampleString'
- [s1; s2] 理论上将并联形成两行矩阵,但该例中 s1 与 s2 行宽不等,会报错;
>> s4 = [s1;s2];
错误使用 vertcat
要串联的数组的维度不一致。
>> s4 = [s1;s1];
>> s4s4 =2×7 char 数组'Example''Example'
- 可以对其进行矩阵的索引操作:
>> str = 'aardvark';
>> str(3)ans ='r'
- 可以对其进行逻辑运算操作:
(每个位置分别进行逻辑运算: true返回1;false返回0)
>> 'a'== strans =1×8 logical 数组1 1 0 0 0 1 0 0
- 可以对其进行赋值操作:
>> str(str == 'a') = 'Z'str ='ZZrdvZrk'
练习
>> s1 = 'I like the letter E';
>> s2 = s1(size(s1,2):-1:1)s2 ='E rettel eht ekil I'
size(s1,2)
返回s1的总列数19- s1(19 : -1 : 1)进行索引操作
4.structure(结构体)
- 结构体是一个存储
{键: 值}
的数据结构,使用.
来访问结构体中的字段
student.name = 'John Doe';
student.id = 'jdo2@sfu.ca';
student.number = 301073268;
student.grade= [100, 75, 73; ...95, 91, 85.5; ...100, 98, 72];
student
student(2).name = 'Ann Lane';
student(2).id = 'aln4@sfu.ca';
student(2).number = 301078853;
student(2).grade = [95 100 90; 95 82 97; 100 85 100];
- 结构体的常用函数:
- fieldnames获取结构体的所有字段名
rmfield删除结构体中的某字段
fieldnames(student)
rmfield(student,'id')
- 结构体可以级联(嵌套),即结构体中字段的取值也可以是结构体
A = struct('data', [3 4 7; 8 0 1],'nest', ...struct('testnum','Test 1', ...'xdata', [4 2 8],'ydata', [7 1 6]));
A(2).data = [9 3 2; 7 6 5];
A(2).nest.testnum= 'Test 2';
A(2).nest.xdata= [3 4 2];
A(2).nest.ydata= [5 0 9];
A.nest
- 注意data、nest…是 struct 的下级
5.cell(元胞数组)
- 元胞数组是一个可以容纳不同类型元素的数据结构,使用
{}
像定义矩阵一样定义元胞数组
- 有以下两种方法定义元胞数组: 第一种方式使用
单元索引
赋值,而第二种方式使用内容索引
赋值
A(1,1)={[1 4 3; 0 5 8; 7 2 9]};
A(1,2)={'Anne Smith'};
A(2,1)={3+7i};
A(2,2)={-pi:pi:pi};
A
A{1,1}=[1 4 3; 0 5 8; 7 2 9];
A{1,2}='Anne Smith';
A{2,1}=3+7i;
A{2,2}=-pi:pi:pi;
A
练习
B{1,1} = 'This is the first cell';
B{1,2} = [5+j*6 4+j*5];
B{2,1} = [1 2 3;4 5 6;7 8 9];
B{2,2} = [{'Tim','Chris'}];
B
- 有两种方式访问元胞数组中的数据,分别是: 单元索引
()
和内容索引{}
.
使用单元索引(),我们得到的是一个子元胞数组.
使用内容索引{},我们得到的是元胞数组对应区域中的内容.
>> B(2,1)ans =1×1 cell 数组{3×3 double}>> B{2,1}ans =1 2 34 5 67 8 9
magic(n)
产生n阶魔方矩阵num2cell
将数组转换为相同大小的元胞数组mat2cell
函数可以在转换的时候指定元胞数组各元胞的尺寸
a = magic(3)
b = num2cell(a)
c = mat2cell(a, [1 1 1], 3)a =8 1 63 5 74 9 2b =3×3 cell 数组{[8]} {[1]} {[6]}{[3]} {[5]} {[7]}{[4]} {[9]} {[2]}c =3×1 cell 数组{[8 1 6]}{[3 5 7]}{[4 9 2]}
5.高维数组
- 一个三维的元胞数组可以有行(row),列(column),层(layer)三个维度.在对元胞数组进行索引时,优先级从高到低的顺序分别是:行→列→层
- 方法一:如图所示用 {} 定义三维元胞数组
方法二:使用 cat() 函数在指定维度上对元胞数组进行拼接.
eg.
A{1,1} = [1 2;4 5];
A{1,2} = 'Name';
A{2,1} = 2-4i;
A{2,2} = 7;
B{1,1} = 'Name2';
B{1,2} = 3;
B{2,1} = 0:1:3;
B{2,2} = [4 5]';
C = cat(3, A, B)
- reshape() 改变数组行列数
可以看出 matlab 是按列优先存储矩阵的
>> A = {'James Bond', [1 2;3 4;5 6];pi, magic(5)}
C = reshape(A,1,4)A =2×2 cell 数组{'James Bond'} {3×2 double}{[ 3.1416]} {5×5 double}C =1×4 cell 数组{'James Bond'} {[3.1416]} {3×2 double} {5×5 double}
练习
>> A = [1:3;4:6]A =1 2 34 5 6>> B = reshape(A,3,2)B =1 54 32 6
6.判断变量数据类型的函数
二、文件读写
MATLAB工作区内的数据可以以*.mat格式保存在文件中.
1.save() 和 load()
save()
load()
- 使用save函数将数据存入文件:
save mydata1.mat
将变量以二进制形式存入文件中;
save mydata2.mat -ascii
将变量以文本形式存入文件中
clear;a = magic(4);
save mydata1.mat
save mydata2.mat -ascii
- 使用load函数从文件中读取数据
load(‘mydata1.mat’)从二进制形式文件中读取数据;
load(‘mydata2.mat’,’-ascii’)从文本形式文件中读取数据
load('mydata1.mat')
load('mydata2.mat','-ascii')
2.读写Excel表格
关于 xlsread() 和 xlswrite():从 R2019a 开始 matlab 建议不再使用,以新函数代替。
- xlsread()改用:
readmatrix() 从文件中读取矩阵
readcell() 从文件中读取元胞数组
readtable 基于文件创建表
①readmatrix()
只读取数据,如果指定范围内有其他内容(如 string 等)将直接跳过;
②格式:M=readmatrix('filename.xlsx','Sheet','sheetname','Range','rangenumber')
也可以直接 M = readmatrixd('filename.xlsx')
读取文件中所有数据;
其中’Sheet’,'Range’这两个是固定格式。
③可在 filename 中指定完整路径名;
eg.从名为 ‘2007’ 的工作表中导入前 5 个变量的 10 行
>> M = readmatrix('airlinesmall_subset.xlsx','Sheet','2007','Range','A2:E11')M =2007 1 2 2 7112007 1 3 3 6522007 1 4 4 11162007 1 5 5 8252007 1 7 7 14112007 1 8 1 19352007 1 9 2 20052007 1 11 4 15252007 1 12 5 11332007 1 13 6 922
- xlswrite()改用 :
writetable将表写入文件
writematrix 将矩阵写入文件
writecell将元胞数组写入文件
- writematrix写入文本
- 直接
writematrix(M)
则默认以逗号分隔各元素写入 M.txt 文件中; - 指定分隔符则使用
writematrix(M, 'filename.txt', 'Delimiter', ' ');
'Delimiter’是固定格式 - matlab 支持使用 ;
\t
;,
;;
;|
(对应的字符名称为
space、tab、comma、semi、bar)作为分隔符
writematrix(M,'M_tab.txt','Delimiter','tab')
type 'M_tab.txt'
- writematrix写入表格
writematrix(M, '04Score.xlsx')
将矩阵 M 储存的数据写入表格 M.xlswritematrix(M,'04Score.xlsx', 'Sheet', 1, 'Range', 'E2:E4')
规定范围写入指定表格,注意参数列表中 sheet后的参数可以是表格名也可以是第 x 个表格
eg.计算平均值并写入到表格中并添加单元格标题
Score= readmatrix('04Score.xlsx');
M = mean(Score')';
writematrix(M,'04Score.xlsx','Sheet',1,'Range','E2:E4');
writecell({'Mean'},'04Score.xlsx','Sheet',1,'Range', 'E1');
3.低阶文件处理 I/O 函数
fopen 打开文件或获得有关打开文件的信息
- 无论是写入还是读取都要先获得fileID
fileID = fopen(filename,permission)
将打开由 permission 指定访问类型的文件。permission 为文件访问类型:'r'
(默认)读取 |'w'
写入|… - 操作完毕后务必使用
fclose(fileID)
函数关闭文件,否则 matlab 将一直占用文件
x = 0:pi/10:pi;
y = sin(x);
fid = fopen('sinx.txt','w');
for i=1:11fprintf(fid,'%5.3f %8.4f\n', x(i),y(i));
end
fclose(fid);
type sinx.txt
feof(fid)
检查是否到达文件结尾,到达结尾返回 true
eg.先建一个04asciiData.tx,写入:
John 1995 12 5 12.3 3.24
Tom 1995 12 7 2.3 2.0
Jean 1996 3 2 10.2 0
fid = fopen('04asciiData.txt','r');
i= 1;
while ~feof(fid)name(i,:)= fscanf(fid,'%5c',1);year(i)= fscanf(fid,'%d',1);no1(i)= fscanf(fid,'%d',1);no2(i)= fscanf(fid,'%d',1);no3(i)= fscanf(fid,'%g',1);no4(i)= fscanf(fid,'%g\n');i=i+1;
end
fclose(fid);
>> namename =3×5 char 数组'John ''Tom 1''Jean '
总结
以上就是第二节的内容,本部分介绍了matlab的结构化程式与自定义函数。
【台大郭彦甫】Matlab入门教程超详细学习笔记四:数据类型与文件读写(附PPT链接)相关推荐
- 【台大郭彦甫】Matlab入门教程超详细学习笔记七:数值微积分(附PPT链接)
数值微积分 前言 一.多项式微积分 1. 多项式计算 2. 多项式微分 3. 多项式积分 二.数值微积分 1. 数值微分法 2. 高阶微分法 3. 数值积分法 三.回顾Function Handles ...
- 【台大郭彦甫】Matlab入门教程超详细学习笔记二:基本操作与矩阵运算(附PPT链接)
Matlab入门教程超详细学习笔记二:基本操作与矩阵运算 前言 一.基本操作 1.把matlab当作计算器使用 2.变量 3.控制格式输出 二.矩阵运算 1.矩阵 2.矩阵索引 3.使用:创建向量 4 ...
- 【台大郭彦甫】Matlab入门教程超详细学习笔记五:初阶绘图(附PPT链接)
初阶绘图 前言 一.基础绘图 1.plot() 绘制二维线图 2.legend()添加图例 3.title()和*label()添加标题与坐标轴 4.text()和annotation()增加注解 二 ...
- 【台大郭彦甫】Matlab入门教程超详细学习笔记六:高阶绘图(附PPT链接)
高阶绘图 前言 一.进阶二维绘图 1. 对数图 2.一图双y轴 3. 直方图 4. 条形图 5. 饼状图 6. 极坐标图 7. 阶梯图与取样图 8. 箱线图以及误差线图 9. 填充图 二.配色 1.R ...
- 台大郭彦甫-Matlab软件学习课堂exercise示例(第二讲)
台大郭彦甫-Matlab软件学习课堂exercise示例 (仅供参考) 第二讲 基本操作与矩阵输入 (P6 exercise) >> cos(((1+2+3+4)^3/5)^(1/2))a ...
- Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
所有示例使用的数据表均为Oracle提供的SQL基础数据表(t_employees.sql dept.sql emp.sql salgrade.sql) 熟练掌握多多练习即可达到完成后端开发所需具备的 ...
- 陈宝林《最优化理论与算法》超详细学习笔记 (七)————第五章 运输问题
陈宝林<最优化理论与算法>超详细学习笔记 (七)----第五章 运输问题 第1节 运输问题的数学模型 第2节 表上作业法 2.1 确定初始基可行解 2.2 最优解的判别 2.3 改进的方法 ...
- 陈宝林《最优化理论与算法》超详细学习笔记 (二)————补充知识(凸集) 第二章 线性规划的基本性质
陈宝林<最优化理论与算法>超详细学习笔记 (二)----补充知识 凸集 & 第二章 线性规划的基本性质 补充知识 凸集 方向与极方向 表示定理 择一定理 第一章 线性规划的基本性质 ...
- 陈宝林《最优化理论与算法》超详细学习笔记 (八)————最优性条件
陈宝林<最优化理论与算法>超详细学习笔记 (八)----最优性条件 无约束问题的极值条件 必要条件 二阶充分条件 充要条件 约束极值问题的最优性条件 不等式约束的一阶最优性条件 无约束问题 ...
最新文章
- php安装gb,php安装程序的原理
- RequestResponseServletContext
- [docker]docker压力测试
- 蓝牙L2CAP剖析(二)
- wcf获取MySQL中午乱码,如何启用WCF日志记录,以便它写入数据库?
- p2p-如何拯救k8s镜像分发的阿喀琉斯之踵?
- java设计模式之模板方法
- oracle按天创建分区,oracle 10g按天分区
- *第四周*数据结构实践项目一【创建单链表】
- 【Java】Hello world
- 操作系统 第二部分 进程管理(一)
- Python小练习——电影数据集TMDB预处理
- 项目进度管理工具——甘特图
- 草图大师(SketchUp Pro 2019)多语言 永久启用教程
- omv检查硬盘坏道_MHDD磁盘坏道扫描工具使用方法(详细图文教程)
- CSDN-markdown总结前辈经验
- 在中国移动(中国联通、中国电信)工作是一种怎样的体验?
- 《如何搭建小微企业风控模型》第三节 风控模型概览
- 网站被微信浏览器拦截怎么办 微信屏蔽网址打开如何解决
- Java多线程篇--threadlocal和线程池