视频地址:https://www.bilibili.com/video/av68228488?p=4
本文主要学习了变数、字符串、结构体、单元数组
各类型所占空间
关于有符号和无符号型,有符号型最高位为符号,所以能使用的空间最大为2^7,
以上内容摘自CSDN博主「LANGZI7758521」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/langzi7758521/article/details/51512215
在MATLAB中,创建的一个数,默认是double,如果要转换其类型,可以使用以下函数。
double()
single()
int8()
int16()
int32()
int64()
uint8()
uint16()
uint32()
uint64()
例如:
A=8;
B=int8(A)
Char
保存字符时要用单引号括起来。例如: s= ‘h’
clear all; %17分钟练习
str='aardvark'; %MATLAB默认是从1开始,不是0
str(3)
'a'==str %注意这里 == 是等号的判断,是判断是否有相等的,不是赋值。采用布尔,相同为1,不相同为0。会判断str的每一个位置
str(str=='a')='Z' %把里面是‘a’的元素提取出来换成 'Z'
clear; %22分钟练习
str1='aardvark';
str2=zeros(1,8);
str2=input('please input your string:','s');
for i=1:8
if str2(i) == str1(i) %这里有个BUG,如果输入的字符比如为: aar,后面再不输,他会一直比较下去,没办法解决。
i+1;
else
disp('sorry, you are wrong.')
break;
end
if i==8
disp('your string is right.')
end
end
%%
clear; %22分钟练习
str1='aardvark';
str2=zeros(1,8);
str2=input('please input your string:','s');
tf=strcmp(str1,str2); %这里是个弹幕大神给的比较字符串的方法,正确。
if tf==1
disp('you are right.')
else
disp('you are wrong.')
end
strcmp() - 比较字符串函数
此 MATLAB 函数 比较 s1 和 s2,如果二者相同,则返回 1 (true),否则返回 0
(false)。如果文本的大小和内容相同,则它们将视为相等。返回结果 tf 的数据类型为 logical。
tf = strcmp(s1,s2)
22分钟练习
clear; %%22分钟练习
s1='I like the letter E';
for i=1:size(s1,2) %%这里size(s1,1)是获取s1的行,如果 是size(s1,2)是获取列
s2(i)=s1(size(s1,2)-i+1);
end
disp(s2)
%%
clear; %%22分钟练习可以引申为输入随机的字符串
s1=input('please input your string:','s');
for i=1:size(s1,2)
s2(i)=s1(size(s1,2)-i+1);
end
disp(s2)
Structure
一个类下面可以有多个领域。如果一个类下面有多个学生,就可以使用类似矩阵的方式。
student(1).name='John Doe'; %%31分钟练习
student(1).id='jd2@sfu.ca';
student(1).number=301073268;
student(1).grade=[100 75 73;95 91 85.5;100 98 72];
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];
student
student(1)
student(2).grade(7) %%可以参考MATLABE教学_02的博文
student(2).grade(1,3)
Structure 的函数
函数 | 功能 | 举例 |
---|---|---|
cell2struct | 将单元数组转换为struct,注意里面的fields都要写领域名称 | cell2struct(student,{‘name’,‘id’,‘number’,‘grade’},1) |
fieldnames | 显示struct的领域 | fieldnames(student) |
getfield | 获取某一个structure的领域 | getfield(student(1),‘id’) |
isfield | 检查名为student的struct里是否包含名为id的领域,返回布尔值 | isfield(student,‘id’) |
isstruct | 检查是否为struct类型,返回布尔值 | isstruct(student) |
orderfields | 此 MATLAB 函数 对 struct中的每个领域进行排序,使新的结构体数组 s 的字段名称按 ASCII 码字典的顺序排列。 | |
rmfield | 移除某一个领域 | refield(student,‘id’) |
setfield | 为指定的field指定内容 | setfield(student(1),‘name’,33) |
struct | 访问某个struct | struct(student) |
struct2cell | 将struct转换为单元数组 | |
structfun |
structure的嵌套
这里老师讲的不太对。在定义时前一个是名字,后一个是属性值,是成对出现的。应该是
Cell
相当于不同的矩阵合集。里面的每一块可以放置不同类型的数据,是因为有指针的关系。在输入时是使用大括号,可以有两种输入方式。
- 大括号放到后面去,例如: A(1,1)={[1 4 3; 0 5 8; 7 2 9]}
- 大括号放到前面来,例如:A{1,1}=[1 4 3; 0 5 8;7 2 9]
A(1,1) %这个只能查看到A(1,1)是个什么类型
A{1,1} %可以看到A(1,1)里具体的数据
A{1,1}(4) %可以看到A(1,1)这个矩阵里面的第4个数据为 4
A{1,2}(1) %可以看到A(2,1)这个字符串里面的第1个数据为 'A'
函数 | 功能 | 举例 |
---|---|---|
cell | 创建一个cell | cell(n) 返回由空矩阵构成的 n×n 元胞数组 |
cell2mat | 将cell转换为基础数据类型的普通数组,元胞数组的元素必须全都包括相同的数据类型,并且生成的数组也是该数据类型。 | cell2mat(n) |
cell2struct | 将Cell转换为struct | structArray = cell2struct(cellArray, fields, dim) |
celldisp | 显示cell的每个具体内容 | |
cellfun | 对元胞数组中的每个元胞应用函数 | cellfun(func,C) 将函数 func 应用于元胞数组 C 的每个元胞的内容,每次应用于一个元胞 |
cellplot | 将cell中每个数据所占的位置用图形的方式展示出来 | |
iscell | 确定是否为cell | |
mat2cell | mat2cell(a, [10 20 30], [10 20]),这里假设a是一个60行30列的矩阵,将它转换为cell后,是把行分为了10行,20行和30行各一个Cell,将30列分为了10列和20列 | |
struct2cell | ||
num2cell |
CAT()函数
CAT函数的第1个参数,1代表按行连接,2代表按列连接,3代表按页连接
reshape()
此 MATLAB 函数 使用大小向量 sz 重构 A 以定义 size(B)。例如,reshape(A,[2,3]) 将 A 重构为一个 2×3 矩阵。sz
必须至少包含 2 个元素,prod(sz) 必须与 numel(A) 相同。
注意:1. A的size(A)= 重构后的行 * 列
2. reshape在重构时,里面的元素是按照顺序排列的。不是说跟矩阵的转置一样。
File Access
MATLAB存储文件有两种方式。一种是存储为 *.mat 格式, 一种为EXCEL。
save mydata1.mat %将工作区所有的变数全部保存到名为mydata1的 *.mat 文件中,比ascii的格式要存储的内容要多
save mydata2.mat -ascii % %将工作区所有的变数全部保存到名为mydata1的 *.mat 文件中,并且以ASCII码的格式存储
save mydata1.mat, A %将工作区中A这个变数存到mydata1.mat 文件中
load('mydata1.mat', ) %读取 mydata1.mat
load('mydata1.mat', '-ascii') %如果 mydata1.mat是用 ASCII格式存储的,那么读取时要用这个格式
xlswrite('04.xlsx',M) %将变数M存到04.xlsx
xlswrite('D:\04.xlsx',M) %将变数M存到04.xlsx,位置放到D盘
xlswrite('04.xlsx',M,1,'E2:E4') % 将娈数M放到04.xlsx的SHEET1,位置为E2:E4
xlswrite('04.xlsx',{'Mean'},1,'E1') % 将字符串 Mean 放到04.xlsx的SHEET1,位置为E1
xlsread('04Score.xlsx') %读取04Score.xlsx
xlsread('04Score.xlsx','B2:D4') %读取04Score.xlsx的B2:D4
[Score Header] = xlsread('04.xlsx') %可以看到所有的数据都放到Score,所有的标题放到 Header
Low-level File I/O Functions
clear all;
x=0:pi/10:pi; %%95分钟练习
y=sin(x);
fid= fopen('sinx.txt','w'); %% fopen 打开文件, W是写,R是读
for i= 1:11
fprintf(fid, '%5.3f %8.4f\n', x(i),y(i)); %%写入的数据
end
fclose(fid);
type sinx.txt