MATLAB数据类型全面解析

简介 MatLab 中基本数据类型–数值(numeric)、字符(char)、逻辑值(logical)、结构体(struct)、元胞数组(cell)。
在这里插入图片描述

数值类型(numeric)

分类

  1. 整型
  2. 浮点型
  3. 复数型

MATLAB 默认情况下以双精度浮点形式 (double) 存储数值数据。

整型

不带小数的数

MATLAB依据在内存中分配的字节数(字节数不同其表示范围就不同)分为四个有符号整数类四个无符号整数类。有符号类型可以处理负整数以及正整数,但表示的数字范围不如无符号类型广泛,因为有一个bit用于指定数字的正号(0)或负号(1)。无符号类型提供了更广泛的数字范围,但这些数字只能为零或正数

MATLAB支持以 1字节(8bit)、2字节、4字节和 8字节几种形式存储整数数据。如果使用可容纳某数据的最小整数类型来存储某数据,则可以节省程序内存和执行时间。例如,不应使用 32 位整数来存储值 100


八个整数类存储的值范围创建该类型所需的转换函数
有符号 8 位整数(10000000~01111111) -27 到 27-1int8
有符号 16 位整数-215 到 215-1int16
有符号 32 位整数-231 到 231-1int32
有符号 64 位整数-263 到 263-1int64
无符号 8 位整数(00000000~11111111) 0 到 28-1uint8
无符号 16 位整数0 到 216-1uint16
无符号 32 位整数0 到 232-1uint32
无符号 64 位整数0 到 264-1uint64
>> x = int8(129)
x =
   127
   
>> x = uint8(129)
x =
   129

创建整数数据

MATLAB默认情况下以双精度浮点形式 (double) 存储数值数据。要以整数形式存储数据,需要从 double 转换为所需的整数类型。

例如,如果要以 16 位有符号整数形式存储赋给变量 x 的值 325,请键入

x = int16(325);

如果待转换的数值带有小数部分,MATLAB 将舍入到最接近的整数。如果小数部分正好是 0.5,则 MATLAB 会从两个同样临近的整数中选择绝对值大小更大的整数

>> a = 23.8
a =
   23.8000
>> int8(a)
ans =
   24

>> b = 52.5
b =
   52.5000
>> int8(b)
ans =
   53

浮点型

MATLAB以双精度或单精度格式表示浮点数,默认为双精度。单精度型实数在内存中占用4个字节,而双精度型在内存中占用8个字节,所以双精度的数据精度更高。

一般使用双精度来存储大于 3.4 x 10^38 或约小于 -3.4 x 10^38 的值。对于位于这两个范围之间的数值,可以使用双精度,也可以使用单精度,但单精度需要的内存更少。

类型转换函数

single() :将其他类型的数据转换为单精度型

double() :将 其他类型的数据转换为双精度型

>> class(4)  % 数值数据默认为``double类型``
ans =
    'double'
>> class(single(4))
ans =
    'single'

复数

复型数据由实部虚部组成,实部和虚部为双精度型,虚部单位用ij来表示

复数函数


abs绝对值和复数的模
ij虚数单位
real复数的实部
imag复数的虚部
angle相位角
conj复共轭
complex创建复数数组
cplxpair将复数排序为复共轭对组
isreal确定数组是否为实数数组
signsign 函数(符号函数)
unwrap更正相位角以生成更平滑的相位图

类型转换函数

imag():求复数的虚部

real():求复数的实部

>> a = 6+5i
a =
   6.0000 + 5.0000i
>> real(a)
ans =
     6
>> real(6+5j)
ans =
     6
>> imag(6+5j)
ans =
     5
>> imag(a)
ans =
     5

数值数据的输出格式

数值格式仅影响数字显示在命令行窗口输出中的方式,而不是 MATLAB计算或保存它们的方式。

format style 将命令行窗口中的输出显示格式更改为 style 指定的格式。

format 自行将输出格式重置为默认值,即浮点表示法的短固定十进制小数点格式和适用于所有输出行的宽松行距。


Style结果示例
short (default)短固定十进制小数点格式,小数点后包含 4 位数。3.1416
long()长固定十进制小数点格式,double 值的小数点后包含 15 位数,single 值的小数点后包含 7 位数。3.141592653589793
shortE短科学记数法,小数点后包含 4 位数。3.1416e+00
longE长科学记数法,double 值的小数点后包含 15 位数,single 值的小数点后包含 7 位数。3.141592653589793e+00
shortG短固定十进制小数点格式或科学记数法(取更紧凑的一个),总共 5 位。3.1416
longG长固定十进制小数点格式或科学记数法(取更紧凑的一个),对于 double 值,总共 15 位;对于 single 值,总共 7 位。3.14159265358979
shortEng短工程记数法,小数点后包含 4 位数,指数为 3 的倍数。3.1416e+000
longEng长工程记数法,包含 15 位有效位数,指数为 3 的倍数。3.14159265358979e+000
+正/负格式,对正、负和零元素分别显示 +- 和空白字符。+
bank货币格式,小数点后包含 2 位数。3.14
hex二进制双精度数字的十六进制表示形式。400921fb54442d18
rat小整数的比率。355/113

字符串类型(char)

见文本与字符.md

逻辑值(logical)

逻辑类型的数据是指布尔类型的数据及数据之间的逻辑关系。 除了传统的数学运算, MATLAB还支持关系和逻辑运算。 这些运算的目的是提供求解真/假命题的答案。

作为所有关系和逻辑表达式的输入,MATLAB 把任何非零数值当作真,输出为1, 把零当作假, 输出为0。

逻辑类型数据进行运算时需要用到关系操作符逻辑运算符

结构体(structure)

在MATLAB中,结构体是一个存储{键: 值}的数据结构,类似于Python语言中的字典.

结构体的基本使用

  1. 与大多数编程语言类似,MATLAB使用.来访问结构体中的字段:
student.name = 'John Doe';
student.id = 'jdo2@sfu.ca';
student.number = 301073268;
student.grade = [100, 75, 73; ...
                 95, 91, 85.5; ...
                 100, 98, 72];
student

image-20200811081042936

  1. 对结构体列表使用下标表达式可以扩充或缩减结构体列表
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

image-20200811081001445

image-20200811081236333

结构体的常用函数


函数作用
struct创建结构体
struct2cell将结构体转换为元胞数组
cell2struct将元胞数组转换为结构体
isstruct判断某变量是否是结构体
structfun对结构体的每个字段都应用某函数
fieldnames获取结构体的所有字段名
isfield判断结构体是否包含某字段
getfield获取结构体某字段的值
setfield为结构体中的某字段赋值
rmfield删除结构体中的某字段
orderfields为结构体字段排序

元胞数组(cell)

在 MATLAB 中,元胞数组是一个可以容纳不同类型元素的数据结构,类似于Python语言中的列表

元胞数组的基本使用

  • 我们可以使用{}像定义矩阵一样定义元胞数组:
A = { [1 4 3; 0 5 8; 7 2 9]		'Anne Smith' ;...
3+7i		-pi:pi:pi}
A(1,1)={[1 4 3; 0 5 8; 7 2 9]};
A(1,2)={'Anne Smith'};
A(2,1)={3+7i};
A(2,2)={-pi:pi:pi};
A{1,1}=[1 4 3; 0 5 8; 7 2 9];
A{1,2}='Anne Smith';
A{2,1}=3+7i;
A{2,2}=-pi:pi:pi;
  • 上面三种方式是等价的。其中第二种方式使用单元索引赋值,而第三种方式使用内容索引赋值。因为元胞数组的子集仍为元胞数组,在索引器内容的使用,我们有必要指明我们要访问的的是一个子元胞数组还是元胞数组对应区域中的内容
       

元胞数组的常用函数


函数作用
cell创建一个元胞数组
iscell判断某变量是否为元胞数组
cell2mat将元胞数组转为矩阵
cell2struct将元胞数组转为结构体
mat2cell将数组转换为指定大小元胞数组
num2cell将数组转换为相同大小的元胞数组
struct2cell将结构体转换为元胞数组
celldisp递归显示元胞数组中的内容
cellplot以图像形式绘制元胞数组的结构
cellfun对元胞数组的每个元胞应用某函数

其中mat2cell函数可以在转换的时候指定元胞数组各元胞的尺寸.

a = magic(3)

b = num2cell(a)
% 得到
% [8] [1] [6]
% [3] [5] [7]
% [4] [9] [2]

c = mat2cell(a, [1 2], [2, 1])

判断变量数据类型的函数

下列函数可以对变量类型进行判断:


函数作用
isinteger判断输入参数是否为整型数数组
islogical判断输入参数是否为逻辑量数组
isnumeric判断输入参数是否为数值数组
isreal判断输入参数是否为实数数组
ischar判断输入参数是否为字符数组
iscell判断输入参数是否为元胞数组
isfloat判断输入数组是否为浮点数组
ishandle判断输入数组是否有效的图形句柄
isempty判断输入数组是否为空
isprime确定哪些数组元素为质数
isnan确定哪些数组元素为NaN
isinf确定哪些数组元素为Inf
isequal判断数组是否相等


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空