MATLAB 数据类型

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

前言简介 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判断数组是否相等
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6