Matlab笔记 第四章 变量与档案存取

本文档深入讲解了MATLAB中的变量类型转换、字符与字符串操作、逻辑运算与结构体,以及元胞数组、多维数组和数组级联的使用。涵盖了档案存取、Excel文件读写、低级文件I/O和高级功能如检查变量状态。适合初学者和进阶者学习数据处理技巧。
摘要由CSDN通过智能技术生成

目录

1 变量

1.1 变量类型转换

1.2 字符和字符串

字符

字符串 

逻辑操作与分配

练习1

1.3 结构体

 结构体函数

1.4 元胞数组

特点:

练习2

访问元胞数组

元胞数组函数

1.5 多维数组

1.6 数组级联

1.7 检查变量和变量状态

2.档案存取

2.1 存取

2.2 Excel文件的读写

2.3 低级文件输入/输出

低级文件I/O函数

通过格式化的I/O读写


1 变量

1.1 变量类型转换

double()转换为双精度
single()转换为单精度
int8()转换为8位有符号整数,占用1字节
int16()转换为16位有符号整数,占用2字节
int32()转换为32位有符号整数,占用4字节
int64()转换为64位有符号整数,占用8字节
unit8()转换为8位无符号整数
unit16()转换为16位无符号整数
unit32()转换为32位无符号整数
unit64()转换为64位无符号整数

1.2 字符和字符串

  • 字符在ASCll表中使用0到255之间的数字代码表示
  • 通过将字符或字符串放入一对单引号创建字符或字符串

字符

x = 'h' % 把h字符赋给了x变量

字符串 

s1 = 'Example';s2 = 'String'; % 把字符串赋予给变量
s3 = [s1 s2];s4 = [s1;s2]; % 字符串级联

逻辑操作与分配

  • 许多数值运算符和逻辑运算符可以应用于字符串:
>> str = 'Example';
>> 'a' == str %判断str中的为a的元素
ans = 0  0  1  0  0  0  0
>> str(str == 'a') = 'z' %把a改成z
str = Exzmple

练习1

s1 = 'I like the letter E';
s2 = s1(end:-1:1) %s1反过来

1.3 结构体

  • 一种存储异构数据的方法。
  • 结构体包含称为字段的数组。
  • 学生作业成绩:
% 第一种添加结构体的方法
student.name = 'John';
student.id = 'xxx';
student.number = 10000000;
student.grade.chinese = [85 86;87 89];
student.grade.math = [100 99;80 84];
% 第二种添加结构体的方法(嵌套结构体)
student(2) = struct('name','Alice','id','yyy','number',10000001,'grade',...
                    struct('Chinese',[66 77;88 99],'math',[33 44;55 66]));

 结构体函数

cell2struct将元胞数组转换为结构体数组
fieldnames结构的字段名或对象的公共字段
getfield结构数组的字段
infield确定输入是否为结构数组字段
instruct确定输入是否为结构数组
orderfields结构数组的有序字段
rmfield从结构中移除字段
setfield为结构数组字段赋值
struct创建结构数组
struct2cell将结构体转换为元胞阵列
structfun将函数应用于标量结构体的各个字段

1.4 元胞数组

  • 另一种将异构数据存储在矩阵中的方法
  • 与矩阵相似但每个条目包含不同类型的数据
  • 使用{}表示

表示出如下元胞数组:

% 第一种方式
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

特点:

  • 元胞数组中的每个条目都持有数据结构的指针
  • 同一细胞的不同细胞可以指向不同类型的数据结构

练习2

表示出如下数组:

% 第一种方式
B(1,1)={'This is the first cell'};
B(1,2)={[5+6j 4+5j]};
B(2,1)={[1 2 3;4 5 6;7 8 9]};
B(2,2)={{'Tim' 'Chris'}};
B
% 第二种方式
B{1,1}='This is the first cell';
B{1,2}=[5+6j 4+5j];
B{2,1}=[1 2 3;4 5 6;7 8 9];
B{2,2}={'Tim' 'Chris'}
B

访问元胞数组

大括号{}用于访问元胞数组的“内容”。

C = A(1,1) %不读取内容
D = A{1,1} %读取内容

元胞数组函数

cell创建元胞数组
cell2mat将元胞数组转化为数字数组
cell2struct将元胞数组转化为结构体数组

celldisp

元胞数组内容
cellfun应用函数于元胞数组中的每个元胞
cellplot元胞数组图形显示结构
cellstr从字符数组创建字符串元胞数组
iscell确定输入是否为元胞数组
mat2cell将数组转换为具有不同大小元胞的元胞数组
num2cell将数组转换为具有一致大小元胞的元胞数组
struct2cell结构体转换到元胞数组
  •  num2cell()和mat2cell

a = magic(3) %奇异矩阵,每行、每列、对角线的和为15
b = num2cell(a) %将数组转换为相同大小的元胞数组
c = mat2cell(a,[1 1 1],3) %将数组转换为在元胞中包含子数组的元胞数组。[1 1 1]这个位置为行,代表分为了三个1行;3的位置为列,代表一个3列。
A = zeros(60,50);
C = mat2cell(A,[10 20 30],[25 25]);

1.5 多维数组

 表示出如下多维数组:

A{1,1,1}=[1 2;4 5];A{1,2,1} = 'Name';
A{2,1,1} = 2-4i;   A{2,2,1} = 7;
A{1,1,2} = 'Name2';A{1,2,2} = 3;
A{2,1,2} = 0:1:3;  A{2,2,2} = [4 5]';

1.6 数组级联

  • cat()

表示出如下图所示的数组:

%%数组级联cat()
A=[1 2;3 4];B=[5 6;7 8];
C=cat(1,A,B) %1代表行联,2代表列联,3代表页联
  •  reshape()

%%返回一个具有指定行和列的新数组reshape
A={'James Bond',[1 2;3 4;5 6];pi,magic(5)}
C = reshape(A,1,4)

1.7 检查变量和变量状态

isinteger确定输入是否为整数数组
islogical确定输入是否为逻辑数组
isnan检测一个不是数字的元素(NaN)
isnumeric确定输入是否为数字数组
isprime检测数组的各元素
isreal确定所有数组元素是否为实数
iscell确定输入是否为元胞数组
ischar确定输入是否为字符数组
isempty确定输入是否为空数组
isequal确定数组是否数值相等
isfloat确定输入是否为浮点数组
isglobal确定输入是否为全局变量
ishandle检测有效的图形对象手柄
isinf检测数组的无穷大元素

2.档案存取

 支持的文件格式:

文件内容扩展名描述输入函数输出函数
MATLAB格式化数据MAT保存MATLAB工作区loadsave
文本空间分隔数loadsave
工作表XLS,XLSXxlsreadxlswrite

2.1 存取

  • 保存工作区中的所有数据到文件:
clear; a = magic(4);
save mydata1.mat %用其他应用浏览无法看到变量的具体内容
save mydata.mat -ascii %用其他应用浏览可以看到变量的具体内容
  •  从文件中载入数据:
load('mydata1.mat') %变量名称存在
load('mydata2.mat','-ascii') %-ascii储存的信息少,载入后无变量名称

2.2 Excel文件的读写

  • 读取:
Score = xlsread('04score.xlsx')
%%读取特定位置的表格
Score = xlsread('04score.xlsx','B2:D4')
  •  写入:
M=mean(Score')'; %求每行的平均并转置
%%在Sheet1的E2:E4写入M,在E1写入Mean
xlswrite('04score.xlsx',M,1,'E2:E4');
xlswrite('04score.xlsx',{'Mean'},1,'E1');
S = std(Score')'; %求每行的标准差并转置
xlswrite('04score.xlsx',S,1,'F2:F4');
xlswrite('04score.xlsx',{'Std'},1,'F1');
  • 在Excel电子表格中获取文本并写回:
%%Score为数组,Header为字符串
[Score Header]=xlsread('04Score.xlsx')
%%再次写入Excel表格
Score = num2cell(Score);
Header(2:4;2:4) = Score;
xlswrite('04score.xlsx',Header,1,'A1:D4')

2.3 低级文件输入/输出

  • 在字节或字符级别读取和写入文件
  • 文件中具有一个ID fid
  • 文件的位置是由可移动的指针指定的

低级文件I/O函数

fopen打开文件,或获取有关打开的文件的信息
fclose关闭一个或全部打开的文件
fsanf从文本文件读取数据
fprinf写入数据到文本文件
feof到文本文件测试
  • 将正弦值写入文件
x = 0:pi/10:pi; y = sin(x);
fid = fopen('sinx.txt','w'); %打开文件
for i=1:11
  %写入,%5.3f表示3位小数,\n是换行
  fprintf(fid,'%5.3f %8.4f\n',x(i),y(i));
end
fclose(fid); %关闭文件
type sinx.txt %显示文件内容

通过格式化的I/O读写

%%format:格式
A = fscanf(fid,format,size); %读
fprint(fid,format,x,y,...); %写
  • 说明符描述: 
%c单字符%o八进制表示法(无符号)
%d十进制表示法(有符号)%s字符串
%e指数表示法%u十进制表示法(无符号)
%f浮点表示法%x十六进制表示法
%g%e和%f的结合
  •  读取文件(asciiData.txt):
asciiData.txt
asciiData.txt
fid = fopen('asciiData.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');
%fscanf读取文本文件中的数据
  i=i+l;
end
fclose(fid); %关闭文件

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值