MatLab数据类型主要分为逻辑类型、数值类型、字符类型、结构类型、单元数组、函数句柄、映射容器和表格类型。
代码语言:javascript复制graph LR
A[matrix]
B[logical]
C[numeric]
D[char]
E[struct]
F[cell]
G[function_handle]
H[map]
I[table]
J[int8,16,32,64]
K[uint8,16,32,64]
L[single]
M[double]
A --> B & C & D & E & F & G & H & I
C --> J & K & L & M
【注】详细说明请善用MatLab中的help xxx
1. 逻辑类型
逻辑 | 值 |
---|---|
true | 1 |
false | 0 |
MatLab创建逻辑矩阵格式:
代码语言:javascript复制L=logical(A)
其中,A为矩阵。对于A中任意非零元素都将转换为逻辑 1,零元素则转换为逻辑 0。
【注】复数值和NaN不能转换为逻辑值。
2. 数值类型
类型 | 说明 |
---|---|
int8、uint8、int16、uint16、int32、uint32、int64、uint64 | 对应位数的有符号、无符号整型 |
single | 单精度浮点类型(32位) |
double | 双精度浮点类型(64位)(默认数值类型) |
【注】
- 相同数值所占内存大小:整型 < 单精度 < 双精度
- 整型只能与整型或双精度double型进行运算
- 双精度double型参与运算时:
- 参与运算的其他数据为逻辑型、字符型时,返回结果为双精度double型
- 参与运算的其他数据为整型,返回结果为整型
- 参与运算的其他数据为单精度single型,返回结果为单精度single型
- 单精度single型与其他类型数据运算,返回结果为单精度single型
- 上述所有的数值类型同样也是数据类型转换函数名(诸如**int8()、double()**等)
3. 字符类型
MatLab 中的字符/字符串是存储在行向量中的文本,该行向量中的每一个元素代表一个字符。每个字符的值对应其所对应的 ASCII 码值,故字符串是 ASCII 值的数值数组,访问方式同 MatLab 中的数组。
4. 结构类型
MatLab 中的结构类型与 C 语言类似,一个结构可以通过字段存储多个不同类型的数据。
操作 | 方式 | 案例 |
---|---|---|
创建结构对象 | (1)字段赋值(2)struct()函数 | (1)patient.name=‘John’(2)patient=struct(‘name’,‘John’) |
访问结构对象 | 字段访问 | patient.name |
连接结构对象 | [struct1,struct2] | [patient1,patient2] |
5. 单元数组
单元数组是一种广义矩阵,每个单元可以包括一个任意数组或另一个单元数组,故每一个单元可以具有不同的尺寸和内存占用空间。
操作 | 方式 | 案例 |
---|---|---|
创建单元数组 | (1)赋值(使用{})(2)cell()函数创建空单元数组(用于预分配内存空间) | (1)A={‘x’,{1,2};1,2}(2)B=cell(2,2) |
访问单元数组 | (1)单元外标识(圆括号)(2)单元内编址(花括号) | (1)A(1,2)=[1x2 double](2)A{1,2}=1 2 |
合并单元数组 | {cell1,cell2} | {A,B} |
删除数组单元 | 赋值空矩阵 | A{1,2}=[] |
6. 函数句柄
创建函数句柄需要使用到操作符 @ ,使用函数句柄可以实现对函数的间接调用。 创建函数句柄的一般语法格式:
代码语言:javascript复制Function_Handle=@Function_Filename;
其中,@ 是句柄创建操作符,Function_Handle 变量保存了该函数句柄,Function_Filename 是函数对应的 .M 文件或 MatLab 内部函数名。 函数句柄创建后就可以通过函数句柄来调用函数:
代码语言:javascript复制x=1:5;
Function_Handle(x)
MatLab 库函数提供了许多处理函数句柄的操作函数,将函数句柄的功能与其他数据类型联系起来,扩展了函数句柄的应用。
函数 | 功能 |
---|---|
function_handle 或 @ | 间接调用函数 |
func2str | 函数句柄转换为函数名字符串 |
str2func | 函数名字符串转换为函数句柄 |
functions(function_handle) | 返回一个存储函数名、函数类型及函数 .M 文件位置的结构体 |
7. 映射容器
映射容器(Map对象)可以将一个量映射到另一个量,构成一个键值对。映射容器是一种快速键查找的数据结构。
- 键(key)的数据类型可以有:1×times×N字符串、single或double型、整型。一个映射容器中的所有键的数据类型都必须相同。
- 值(value)的数据类型可以是任意类型。
映射容器是Map类的对象,而Map类的所有对象都具有 3 种属性。
属性 | 说明 | 默认值 |
---|---|---|
Count | uint64类型,表明Map对象中键值对的个数 | 0 |
KeyType | 字符串类型,表明Map对象中包括的key的类型 | char |
ValueType | 字符串类型,表明Map对象中包括的数据类型 | any |
Map对象查看属性直接利用 . 运算符:mapObj.Count
、mapObj.KeyType
、mapObj.ValueType
操作 | 方式 | 案例 |
---|---|---|
创建Map对象 | mapObj=containers.Map({key1,···},{value1,···}) | mapObj=containers.Map({‘A’,‘B’},{1,2}) |
访问Map对象 | value=mapObj(key) | x=mapObj(‘A’) |
添加键值对 | mapObj(‘key3’)=value3 | mapObj(‘C’)=3 |
删除键值对 | remove(mapObj,‘key1’) | remove(mapObj,‘A’) |
修改键值对 | mapObj(‘key1’)=value4 | mapObj(‘A’)=4 |
8. 表格类型
表格类型(table)是一种可以包含不同类型数据的表数组。table数组存储列向数据或表格数据,表将每一段列向数据存储在一个变量中,表变量可以具有不同的数据类型和大小,但要求所有变量具有相同的行数。
操作 | 方式 | 案例 |
---|---|---|
创建table对象 | tableObj=table(var1,···) | tableObj=table([1:2]‘,{‘one’,‘two’}’) |
访问table对象 | tableObj.Properties.DimensionNames — 维度名tableObj.Properties.RowNames — 行名tableObj.Properties.Description — 表说明tableObj.Properties.UserData — 表信息tableObj.Properties.VariableNames — 变量名tableObj.Properties.VariableDescriptions — 变量说明table.Properties.VariableUnits — 变量单位 | tableObj.Properties.VariableNames={ {‘Var1’},{‘Var2’} } |