数据类型
MATLAB 中有 16 种基本数据类型或类。这些类中的每一个都是矩阵或数组的形式。除了函数句柄之外,这个矩阵或数组的大小至少为 0 乘 0,并且可以增长到任何大小的 n 维数组。函数句柄始终是标量(1 乘 1)。
MATLAB 中的重要时刻是默认情况下不需要使用任何类型声明或维度语句。定义新变量时,MATLAB 会自动创建它并分配适当的内存空间。
例:
a = 123;
b = [1 2 3];
c = '123';
>> whos
Name Size Bytes Class Attributes
a 1x1 8 double
b 1x3 24 double
c 1x3 6 char
如果变量已经存在,MATLAB 将用新的数据替换原始数据,并在必要时分配新的存储空间。
基本数据类型
基本数据类型有:数字,logical
,char
,cell
,struct
,table
和 function_handle
。
数字数据类型 :
-
浮点数 ( 默认 )
MATLAB 以双精度或单精度格式表示浮点数。默认值是双精度,但你可以使用简单的转换函数使任何数字单精度:
a = 1.23; b = single(a); >> whos Name Size Bytes Class Attributes a 1x1 8 double b 1x1 4 single
-
MATLAB 有四个有符号整数和四个无符号整数类。有符号类型使你可以使用负整数和正整数,但不能表示与无符号类型一样宽的数字范围,因为一位用于指定数字的正号或负号。无符号类型为你提供更广泛的数字,但这些数字只能为零或正数。
MATLAB 支持整数数据的 1 位,2 位,4 位和 8 字节存储。如果使用适合数据的最小整数类型,则可以节省程序的内存和执行时间。例如,你不需要 32 位整数来存储值 100。
a = int32(100); b = int8(100); >> whos Name Size Bytes Class Attributes a 1x1 4 int32 b 1x1 1 int8
要将数据存储为整数,你需要将 double 转换为所需的整数类型。如果转换为整数的数字具有小数部分,则 MATLAB 将舍入为最接近的整数。如果小数部分恰好是
0.5
,那么从两个同样接近的整数中,MATLAB 选择绝对值大小的那个。a = int16(456);
-
字符数组为 MATLAB 中的文本数据提供存储。与传统的编程术语保持一致,字符的数组(序列)被定义为字符串。MATLAB 的零售版中没有明确的字符串类型。
-
logical:逻辑值为 1 或 0,分别表示 true 和 false。用于关系条件和数组索引。因为它只是 TRUE 或 FALSE,所以它的大小为 1 个字节。
a = logical(1);
-
结构体。结构数组是一种数据类型,它使用称为字段的数据容器对不同数据类型的变量进行分组。每个字段可以包含任何类型的数据。使用 structName.fieldName 形式的点表示法访问结构中的数据。
field1 = 'first'; field2 = 'second'; value1 = [1 2 3 4 5]; value2 = 'sometext'; s = struct(field1,value1,field2,value2);
为了访问 value1,以下每个语法都是等效的
s.first or s.(field1) or s.('first')
我们可以使用第一种方法显式访问我们知道将存在的字段,或者传递字符串或创建字符串以访问第二个示例中的字段。第三个例子是说明点父语法符号采用一个字符串,该字符串与存储在 field1 变量中的字符串相同。
-
表变量可以具有不同的大小和数据类型,但所有变量必须具有相同的行数。
Age = [15 25 54]'; Height = [176 190 165]'; Name = {'Mike', 'Pete', 'Steeve'}'; T = table(Name,Age, Height);
-
单元格。它是非常有用的 MATLAB 数据类型:单元阵列是一个数组,它的每个元素可以是不同的数据类型和大小。它是非常强大的工具,可以根据需要操作数据。
a = { [1 2 3], 56, 'art'};
要么
a = cell(3);
-
function handle 存储指向函数的指针(例如,存储到匿名函数)。它允许你将函数传递给另一个函数,或从 main 函数外部调用本地函数。
每种数据类型都有很多工具,还有内置的数据类型转换功能 (str2double
,table2cell
)。
其他数据类型
有几种其他数据类型在某些特定情况下很有用。他们是:
-
日期和时间:表示日期,时间和持续时间的数组。
datetime('now')
返回21-Jul-2016 16:30:16
。 -
分类数组:它是用于存储具有一组离散类别的值的数据的数据类型。用于存储非数字数据(存储器有效)。可以在表中使用来选择行组。
a = categorical({'a' 'b' 'c'});
-
映射容器是一种数据结构,它具有独特的能力,不仅可以通过任何标量数值而且可以通过字符向量进行索引。对 Map 元素的索引称为键。这些键以及与它们关联的数据值存储在 Map 中。
-
时间序列是按时间顺序采样的数据向量,通常以规则的间隔进行。存储与时间步长相关的数据非常有用,它有许多有用的方法可供使用。