MATLAB里常用的数据容器有普通数组、元胞数组、结构体和表格。选哪个,取决于元素是否同类型、有没有列名、以及是不是一组带属性的对象。
data = { '苹果', 3.5; '香蕉', 2.8; '橙子', 4.2 };
data{2, 1}结果是 '香蕉'。名称和价格放进同一个 cell 没问题,但具体场景未必该用 cell,下面按用途对照。
四个容器对照
| 容器 | 适合存什么 | 索引方式 |
|---|---|---|
| 普通数组 | 同类型数值,要做数学运算 | A(i,j) |
| 元胞数组 cell | 混合数据、无列名 | C{i,j}(花括号取数据) |
| 结构体 struct | 对象式数据,属性有名字 | s.field 或 s(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。