MatLab数据结构

MatLab数据类型主要分为逻辑类型数值类型字符类型结构类型单元数组函数句柄映射容器表格类型

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创建逻辑矩阵格式:

1
L=logical(A)

其中,A为矩阵。对于A中任意非零元素都将转换为逻辑 1,零元素则转换为逻辑 0。

【注】复数值和NaN不能转换为逻辑值。

2. 数值类型

类型 说明
int8、uint8、int16、uint16、int32、uint32、int64、uint64 对应位数的有符号、无符号整型
single 单精度浮点类型(32位)
double 双精度浮点类型(64位)
默认数值类型

【注】

  • 相同数值所占内存大小:整型 < 单精度 < 双精度
  • 整型只能与整型或双精度double型进行运算
  • 双精度double型参与运算时:
  1. 参与运算的其他数据为逻辑型、字符型时,返回结果为双精度double型
  2. 参与运算的其他数据为整型,返回结果为整型
  3. 参与运算的其他数据为单精度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. 函数句柄

创建函数句柄需要使用到操作符 @ ,使用函数句柄可以实现对函数的间接调用。
创建函数句柄的一般语法格式:

1
Function_Handle=@Function_Filename;

其中,@ 是句柄创建操作符,Function_Handle 变量保存了该函数句柄,Function_Filename 是函数对应的 .M 文件或 MatLab 内部函数名。
函数句柄创建后就可以通过函数句柄来调用函数:

1
2
x=1:5;
Function_Handle(x)

MatLab 库函数提供了许多处理函数句柄的操作函数,将函数句柄的功能与其他数据类型联系起来,扩展了函数句柄的应用。

函数 功能
function_handle 或 @ 间接调用函数
func2str 函数句柄转换为函数名字符串
str2func 函数名字符串转换为函数句柄
functions(function_handle) 返回一个存储函数名、函数类型及函数 .M 文件位置的结构体

7. 映射容器

映射容器(Map对象)可以将一个量映射到另一个量,构成一个键值对。映射容器是一种快速键查找的数据结构。

  • (key)的数据类型可以有:1×\timesN字符串、single或double型、整型。一个映射容器中的所有键的数据类型都必须相同。
  • (value)的数据类型可以是任意类型。

映射容器是Map类的对象,而Map类的所有对象都具有 3 种属性。

属性 说明 默认值
Count uint64类型,表明Map对象中键值对的个数 0
KeyType 字符串类型,表明Map对象中包括的key的类型 char
ValueType 字符串类型,表明Map对象中包括的数据类型 any

Map对象查看属性直接利用 . 运算符:mapObj.CountmapObj.KeyTypemapObj.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'} }

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!