MATLAB里常用的数据容器有普通数组、元胞数组、结构体和表格。选哪个,取决于元素是否同类型、有没有列名、以及是不是一组带属性的对象。

data = { '苹果', 3.5; '香蕉', 2.8; '橙子', 4.2 };
data{2, 1}

结果是 '香蕉'。名称和价格放进同一个 cell 没问题,但具体场景未必该用 cell,下面按用途对照。

四个容器对照

容器适合存什么索引方式
普通数组同类型数值,要做数学运算A(i,j)
元胞数组 cell混合数据、无列名C{i,j}(花括号取数据)
结构体 struct对象式数据,属性有名字s.fields(i).field
表格 table像 Excel 或数据库,列有名字T.Column

怎么选

  • 数据是同一种类型吗?是 → 普通数组。不是 → 往下看。
  • 列有没有名字、是否像报表?有且像报表 → table。只是松散容器 → cell。
  • 关心的是一组对象的多个属性吗(例如每个学生有姓名、年龄、成绩)?→ struct。

混合使用的例子

一个简单的学生管理例子里,三种容器可以一起用:

% 用 struct 组织每个学生
s1 = struct('name', 'Riya', 'scores', [88 92 85]);
s2 = struct('name', 'Tiya', 'scores', [91 80 94]);

% 用 cell 装不同长度的历史成绩
s1.history = {[85 90], [88 92 85]};   % 两学期,长度不同

% 用 table 汇总全班
T = table({'Riya';'Tiya'}, {[88 92 85]; [91 80 94]}, ...
    'VariableNames', {'Name', 'Scores'})

struct 管单个人,cell 管长度不一的历史记录,table 管全班汇总,各管一段。

性能提醒

cell 允许元素类型不同,访问通常比普通数组慢。大规模数值计算优先用普通数组,尽量不要在热循环里逐格访问 cell。