变量类型与文件读写

  • 前言
  • 一、变量类型
    • 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

  1. 可对其进行矩阵操作:
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'
  1. 可以对其进行矩阵的索引操作:
>> str = 'aardvark';
>> str(3)ans ='r'
  1. 可以对其进行逻辑运算操作:
    (每个位置分别进行逻辑运算: true返回1;false返回0)
>> 'a'== strans =1×8 logical 数组1   1   0   0   0   1   0   0
  1. 可以对其进行赋值操作:
>> 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.高维数组

  1. 一个三维的元胞数组可以有行(row),列(column),层(layer)三个维度.在对元胞数组进行索引时,优先级从高到低的顺序分别是:行→列→层

  1. 方法一:如图所示用 {} 定义三维元胞数组

    方法二:使用 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将元胞数组写入文件
  1. 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'
  1. writematrix写入表格
  • writematrix(M, '04Score.xlsx') 将矩阵 M 储存的数据写入表格 M.xls
  • writematrix(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链接)相关推荐

  1. 【台大郭彦甫】Matlab入门教程超详细学习笔记七:数值微积分(附PPT链接)

    数值微积分 前言 一.多项式微积分 1. 多项式计算 2. 多项式微分 3. 多项式积分 二.数值微积分 1. 数值微分法 2. 高阶微分法 3. 数值积分法 三.回顾Function Handles ...

  2. 【台大郭彦甫】Matlab入门教程超详细学习笔记二:基本操作与矩阵运算(附PPT链接)

    Matlab入门教程超详细学习笔记二:基本操作与矩阵运算 前言 一.基本操作 1.把matlab当作计算器使用 2.变量 3.控制格式输出 二.矩阵运算 1.矩阵 2.矩阵索引 3.使用:创建向量 4 ...

  3. 【台大郭彦甫】Matlab入门教程超详细学习笔记五:初阶绘图(附PPT链接)

    初阶绘图 前言 一.基础绘图 1.plot() 绘制二维线图 2.legend()添加图例 3.title()和*label()添加标题与坐标轴 4.text()和annotation()增加注解 二 ...

  4. 【台大郭彦甫】Matlab入门教程超详细学习笔记六:高阶绘图(附PPT链接)

    高阶绘图 前言 一.进阶二维绘图 1. 对数图 2.一图双y轴 3. 直方图 4. 条形图 5. 饼状图 6. 极坐标图 7. 阶梯图与取样图 8. 箱线图以及误差线图 9. 填充图 二.配色 1.R ...

  5. 台大郭彦甫-Matlab软件学习课堂exercise示例(第二讲)

    台大郭彦甫-Matlab软件学习课堂exercise示例 (仅供参考) 第二讲 基本操作与矩阵输入 (P6 exercise) >> cos(((1+2+3+4)^3/5)^(1/2))a ...

  6. Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)

    所有示例使用的数据表均为Oracle提供的SQL基础数据表(t_employees.sql dept.sql emp.sql salgrade.sql) 熟练掌握多多练习即可达到完成后端开发所需具备的 ...

  7. 陈宝林《最优化理论与算法》超详细学习笔记 (七)————第五章 运输问题

    陈宝林<最优化理论与算法>超详细学习笔记 (七)----第五章 运输问题 第1节 运输问题的数学模型 第2节 表上作业法 2.1 确定初始基可行解 2.2 最优解的判别 2.3 改进的方法 ...

  8. 陈宝林《最优化理论与算法》超详细学习笔记 (二)————补充知识(凸集) 第二章 线性规划的基本性质

    陈宝林<最优化理论与算法>超详细学习笔记 (二)----补充知识 凸集 & 第二章 线性规划的基本性质 补充知识 凸集 方向与极方向 表示定理 择一定理 第一章 线性规划的基本性质 ...

  9. 陈宝林《最优化理论与算法》超详细学习笔记 (八)————最优性条件

    陈宝林<最优化理论与算法>超详细学习笔记 (八)----最优性条件 无约束问题的极值条件 必要条件 二阶充分条件 充要条件 约束极值问题的最优性条件 不等式约束的一阶最优性条件 无约束问题 ...

最新文章

  1. php安装gb,php安装程序的原理
  2. RequestResponseServletContext
  3. [docker]docker压力测试
  4. 蓝牙L2CAP剖析(二)
  5. wcf获取MySQL中午乱码,如何启用WCF日志记录,以便它写入数据库?
  6. p2p-如何拯救k8s镜像分发的阿喀琉斯之踵?
  7. java设计模式之模板方法
  8. oracle按天创建分区,oracle 10g按天分区
  9. *第四周*数据结构实践项目一【创建单链表】
  10. 【Java】Hello world
  11. 操作系统 第二部分 进程管理(一)
  12. Python小练习——电影数据集TMDB预处理
  13. 项目进度管理工具——甘特图
  14. 草图大师(SketchUp Pro 2019)多语言 永久启用教程
  15. omv检查硬盘坏道_MHDD磁盘坏道扫描工具使用方法(详细图文教程)
  16. CSDN-markdown总结前辈经验
  17. 在中国移动(中国联通、中国电信)工作是一种怎样的体验?
  18. 《如何搭建小微企业风控模型》第三节 风控模型概览
  19. 网站被微信浏览器拦截怎么办 微信屏蔽网址打开如何解决
  20. Java多线程篇--threadlocal和线程池

热门文章

  1. PTA - 数据库合集19
  2. nodejs和java对比_nodejs与java的区别是什么?
  3. CSS 图文左右布局
  4. 爬虫实战 | 手把手用Python教你采集可视化知乎问题的回答(内附代码)
  5. 矩阵宏观调度:Zigzag扫描打印矩阵matrix,图像工程的一种编码
  6. 内存空间 逻辑地址空间 相对地址 绝对地址
  7. 学习MySQL的第一步:安装MySQL及数据库可视化工具Navicat
  8. Vue中mixin的使用
  9. 毕业论文的研究背景怎么写?
  10. vue项目中引入Luckysheet