MATLAB中有15种基本数据类型,其中常用的数据类型主要是整型、浮点型、逻辑类型、结构体、元胞数组及字符串等。
整型
>> x = int8(12)
x =
int8
12
>> y = uint16(x)
y =
uint16
12
>> A = zeros(3, 'uint8')
% 生成全零矩阵
A =
3×3 uint8 矩阵
0 0 0
0 0 0
0 0 0
>> intmin('int8')
% 确定整型数据类型的数据范围
ans =
int8
-128
>> intmax('int8')
ans =
int8
127
浮点型
>> a = single(32)
% 单精度
a =
single
32
>> b = double(10000)
%双精度
b =
10000
>> z = 10
% 默认为双精度
z =
10
>> B = ones(3,'single')
% 三个单精度全1矩阵
B =
3×3 single 矩阵
1 1 1
1 1 1
1 1 1
>> realmin('double')
% 浮点型数据的取值范围查询
ans =
2.2251e-308
>> realmax('double')
ans =
1.7977e+308
逻辑类型
% 1. if 语句的判断
>> a = 5;
>> if a > 0
disp('大于0')
else
disp('小于0')
end
大于0
% 2. 查找矩阵中符合一定条件的数据
>> a = magic(3)
a =
8 1 6
3 5 7
4 9 2
>> a > 5
ans =
3×3 logical 数组
1 0 1
0 0 1
0 1 0
% 3. 逻辑运算
>> x = [1 2 3 -2 0 -1];
>> ~ x
% x中元素为0 则返回"1",否则返回“0”
ans =
1×6 logical 数组
0 0 0 0 1 0
字符串
字符串的生成
一维字符串的生成
% 1. 一维字符串的生成
% 1.1 直接赋值发
>> str = "ABCDE"
str =
"ABCDE"
% 1.2 连接法
>> str1 = strcat(str,"FGH")
str1 =
"ABCDEFGH"
>> str2 = [str1, "STR"]
str2 =
1×2 string 数组
"ABCDEFGH" "STR"
>> str3 = [str1,str2]
str3 =
1×3 string 数组
"ABCDEFGH" "ABCDEFGH" "STR"
二维字符串的生成
% 2. 二维字符串的生成
>> str1 = ['abcd';'efg'] % 注意二维数组在创建时要保证每行列数相同,不然会报下面的错误
要串联的数组的维度不一致。
>> str1 = ['abcd';'efg ']
% 空格填充
str1 =
2×4 char 数组
'abcd'
'efg '
>> str2 = char('ABC','DE')
% 通过char()创建二维字符串
str2 =
2×3 char 数组
'ABC'
'DE '
>> str3 = strvcat(str1,str2)
% 字符串的垂直连接
str3 =
4×4 char 数组
'abcd'
'efg '
'ABC '
'DE '
字符串的操作
字符串的判断
% 1. 字符串的判断
>> str1
str1 =
2×4 char 数组
'abcd'
'efg '
>> ischar(str1)
% 判断是否为字符串
ans =
logical
1
>> isletter(str1)
% 判断每个字符是否为字母
ans =
2×4 logical 数组
1 1 1 1
1 1 1 0
>> isspace(str1)
% 判断每个字符是否为空格
ans =
2×4 logical 数组
0 0 0 0
0 0 0 1
字符串的访问
% 2. 字符串的访问
>> str1 = char('abc','d f',' lee3')
str1 =
3×5 char 数组
'abc '
'd f '
' lee3'
>> str1(1,:)
% 访问字符串中的第1行
ans =
'abc '
>> str1(1,2)
% 访问第1行第2个元素
ans =
'b'
>> str1([1,2])
% 索引访问第1,2行首个元素
ans =
'ad'
>> str1([1,2],[2,3])
% 访问第1行2、3个元素和第2行2、3个元素
ans =
2×2 char 数组
'bc'
' f'
字符串的查找与替换
%3. 字符串的查找与替换
>> str1 = 'Specify character data by placing characters inside a pair of single qutes';
>> k = strfind(str1, 'ar')
% 查找指定字符串,返回其位置
k =
11 37
>> k = strfind(str1,'are')
% 不存在返回空列表
k =
[]
>> k = findstr(str1,'are')
k =
[]
>> k = findstr(str1,'ar')
k =
11 37
>> strrep(str1,'ar','are')
% 替换字符串中的字符
ans =
'Specify chareacter data by placing chareacters inside a pair of single qutes'
>> i = strmatch('min',strvcat('min','minimax','maximum'))
% 字符串中匹配查找
i =
1
2
>> i = strmatch('min',strvcat('min','minimax','maximum'),'exact')
% 查找其精确位置
i =
1
字符串的比较
% 4. 字符串的比较
>> str1 = 'ABC';
>> str2 = 'ABC';
>> str3 = 'abc';
>> str4 = 'ABCD';
>> k1 = strcmp(str1,str2)
% 比较字符串,相等返回1
k1 =
logical
1
>> k2 = strcmp(str1,str3)
% 不相等返回0
k2 =
logical
0
>> k3 = strcmpi(str1,str3)
% 不区分大小写的比较
k3 =
logical
1
>> k4 = strncmp(str1,str4,3)
% 比较两个字符串的前n位是否相同
k4 =
logical
1
字符串的大小写转换
%5. 字符串的大小写转换
>> str = "Hello MATLAB";
>> s = lower(str)
s =
"hello matlab"
>> s = upper(str)
s =
"HELLO MATLAB"
字符串的执行 (eval()函数)
% 6. 字符串的执行 (eval()函数)
>> A = rand(3)
A =
0.9649 0.9572 0.1419
0.1576 0.4854 0.4218
0.9706 0.8003 0.9157
>> eval('length(A)') % 此处直接执行字符串
ans =
3
>> [I,J] = eval('size(A)')
I =
3
J =
3
>> for i = 1:3 % 实现分别给a1,a2,a3赋值操作
eval(['a',num2str(i),'=2*i'])
end
a1 =
2
a2 =
4
a3 =
6
元胞数组
元胞数组的创建
直接赋值法创建元胞数组
% 1. 直接赋值法创建元胞数组
%1.1 元素下标使用
>> a{1,1} = 8;
>> a{1,2} = 'cell study';
>> a{2,1} = magic(3);
>> a{2,2} = magic(3)> 5;
>> a
a =
2×2 cell 数组
{[ 8]} {'cell study'}
{3×3 double} {3×3 logical }
>> b{1,1} = {8};
>> b{1,2} = {'cell study'};
>> b{2,1} = {magic(3)};
>> b{2,2} = {magic(3) > 5};
>> b
b =
2×2 cell 数组
{1×1 cell} {1×1 cell}
{1×1 cell} {1×1 cell}
cell()函数创建元胞数组
% 2. cell()函数创建元胞数组
>> a = cell(2)
a =
2×2 cell 数组
{0×0 double} {0×0 double}
{0×0 double} {0×0 double}
>> a = {1,'c',2,cell(3)}
元胞数组的操作
访问元胞数组
% 1. 访问元胞数组
>> a = {8, 'cell study';magic(3), magic(3) > 5}
a =
2×2 cell 数组
{[ 8]} {'cell study'}
{3×3 double} {3×3 logical }
>> a{1,1}
ans =
8
>> a{1,:}
ans =
8
ans =
'cell study'
>> a{:,2}
ans =
'cell study'
ans =
3×3 logical 数组
1 0 1
0 0 1
0 1 0
>> a{2,2}(1,1)
ans =
logical
1
>> a{2,2}(1,1) + 1
ans =
2
>> a(1,1)
ans =
1×1 cell 数组
{[8]}
>> a(1,1) + 1 %小括号访问不能修改值
未定义与 'cell' 类型的输入参数相对应的运算符 '+'。
元胞数组的显示
% 2. 元胞数组的显示
>> celldisp(a)
a{1,1} =
8
a{2,1} =
8 1 6
3 5 7
4 9 2
a{1,2} =
cell study
a{2,2} =
1 0 1
0 0 1
0 1 0
>> celldisp(a,'s') % 以s为元胞数组命名
s{1,1} =
8
s{2,1} =
8 1 6
3 5 7
4 9 2
s{1,2} =
cell study
s{2,2} =
1 0 1
0 0 1
0 1 0
>> cellplot(a) % 以图形化的方式显示元胞数组
删除元胞数组的内容
% 3.删除元胞数组的内容
>> a{1,1} = []
a =
2×2 cell 数组
{0×0 double} {'cell study'}
{3×3 double} {3×3 logical }
>> a{1,1}
ans =
[]
结构体
结构体的生成
直接赋值法
%1. 直接赋值法
>> ss.name = 'matlba';
>> ss.age = 2019;
>> ss.num = [5:2:16];
>> ss
ss =
包含以下字段的 struct:
name: 'matlba'
age: 2019
num: [5 7 9 11 13 15]
函数法
% 2. 函数法
>> ss1 = struct('name','matlab','age',2019,'num',[5:2:16])
% struct()函数创建结构体
ss1 =
包含以下字段的 struct:
name: 'matlab'
age: 2019
num: [5 7 9 11 13 15]
结构体的操作
访问结构体中的元素
% 1. 访问结构体中的元素
>> stu = struct('sname',{'xiaoming','xiaoli','xiaochen'},'sage',{20,21,22})
stu =
包含以下字段的 1×3 struct 数组:
sname
sage
>> stu(:,1)
ans =
包含以下字段的 struct:
sname: 'xiaoming'
sage: 20
>> stu(1)
ans =
包含以下字段的 struct:
sname: 'xiaoming'
sage: 20
>> stu.sname
ans =
'xiaoming'
ans =
'xiaoli'
ans =
'xiaochen'
>> stu(1).sname
ans =
'xiaoming'
结构体的显示
% 2. 结构体的显示
>> names = fieldnames(stu)
% 显示结构体的域名
names =
2×1 cell 数组
{'sname'}
{'sage' }
>> f = getfield(stu,'sname')
% 显示域名中的内容
f =
'xiaoming'
结构体的删除
% 3. 结构体的删除
>> s = rmfield(stu,'sage')
s =
包含以下字段的 1×3 struct 数组:
sname