MATLAB数据类型决定数值、文本、逻辑值等如何存放。默认写下的普通数字多半是 double,即便看起来像整数。字符用 char(或较新的 string,入门仍常见 char),不同类型混在一张表里时,常用元胞数组 cell。班级名册这类混合数据,正好把几类类型串起来看。

先看几个类型

score = 88.5     % 成绩:双精度
class(score)     % double
number = 12      % 看起来像整数
isinteger(number)% 0(false)
words = 'pass'   % 字符数组
class(words)     % char

常见误区是:字面量 12 默认仍是 double,不是整数类型。需要真正的整型时,应显式转换,例如 int32(12)

常用类型一览

类型说明例子
double双精度浮点,默认数值类型x = 3.14
single单精度浮点,更省内存single(3.14)
int8int64有符号整数int32(12)
uint8uint64无符号整数uint8(200)
logical逻辑值 1/0x > 10
char字符数组'Ada'
cell元胞数组,各格类型可不同{'a', 3.14}
struct结构体,按字段名存数据s.name = 'Ada'

混合数据:元胞数组

普通数值矩阵要求元素类型一致。学号、姓名、成绩混在一起时,可用 cell:

roster = {1, 'Ada',   88.5;
          2, 'Bob',   91.0;
          3, 'Cindy', 78.0}
roster{2, 3}   % Bob 的成绩,91

取出元胞里的内容用花括号 {},这与普通矩阵用圆括号 () 索引的习惯不同。

类型转换

函数作用
double(x)转双精度
int32(x) uint8(x)转整数
char(x)转字符数组
num2str(x)数字转字符串
str2double(s)字符串转数字
logical(x)转逻辑值

转为整数类型时,MATLAB 会对小数做四舍五入,而不是一律向零截断。例如 uint32(789.50) 得到 790:

rn = 5678.92347;
c = int32(rn)   % 5679

class 与 is* 判断

MATLAB 数据类型判断示例运行
class(3)        % 'double'
isnumeric(3)    % 1
isinteger(3)    % 0
ischar('hi')    % 1
isscalar(5)     % 1
isvector([1 2]) % 1

class 给出类型名。isnumericisintegerischar 等按特征返回逻辑值,注意 isinteger(3) 为假,因为字面量 3 仍是 double。

选用时怎么想

  • 连续测量值、成绩、身高等,多用 double
  • 需要固定位宽整数时,再转成 int32 等整型。
  • 带前导零的编号,常存成字符。
  • 是否及格这类二值结果,用 logical 更合适。

下一章进入向量与矩阵后,这些类型会反复出现。