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
请发表评论