MATLAB元胞数组(cell array)用来装类型可以不同的数据。普通数组要求元素类型一致,字符串、数字、矩阵要放在同一容器里时,就用 cell。
和普通数组的区别
| 对比项 | 普通数组 | 元胞数组 |
|---|---|---|
| 元素类型 | 必须相同 | 可以不同 |
| 索引符号 | 圆括号 ( ) | 花括号 { } |
| 典型用途 | 数值计算、矩阵运算 | 混合数据、动态结构 |
创建:花括号
C = {'2023-07-23', [10 20 30 40]}这是一个 1x2 的 cell:第一格是字符串,第二格是数组,类型不同也可以。
想先预分配再填数据,用 cell 函数:
C = cell(2, 3); % 2x3 的空 cell,每个格子是空数组
C{1, 1} = 'Hello';
C{1, 2} = 50;
C{1, 3} = [1 2 3];
C{2, 1} = 3.14;
C{2, 3} = magic(3); % 每个格子类型、大小可以不同动态增长
cell 可以随时加行、加列,不必事先定好最终大小:
C = {};
C(1, :) = {'2023-07-23', [10 20 30 40]};
C(2, :) = {'2023-07-24', [11 22 33 44]};
C(3, :) = {'2023-07-25', [1 2 3 4]}; % 自动长成 3x2圆括号与花括号
圆括号取的是格子本身,花括号取的是格子里的内容:
圆括号 () 取格子本身(得到 cell 容器),花括号 {} 取格子里的内容。
C = {'red', [1 2 3]; 'blue', magic(2)};
C(1, 1) % 得到 1x1 cell,是装着 'red' 的容器
C{1, 1} % 得到里面的数据,即字符串 'red'记法可以记成:圆括号对着格子,花括号取出格子里的东西。
易错点
- 该用
{}却写了():想取字符串却得到 cell,后面做字符串操作往往会报错。 - 一次取出多个格子却赋给单个变量:
C{1, 1:2}会返回两个值,应写成[C{1,1:2}]再接收。 size(C)得到的是格子个数对应的尺寸,不是某个格子里数据的形状。