单元格阵列

同一个类的元素通常可以连接成数组(有一些罕见的例外,例如函数句柄)。默认情况下,类 double 的数字标量可以存储在矩阵中。

>> A = [1, -2, 3.14, 4/5, 5^6; pi, inf, 7/0, nan, log(0)]
A =
   1.0e+04 *
    0.0001   -0.0002    0.0003    0.0001    1.5625
    0.0003       Inf       Inf       NaN      -Inf

在 MATLAB 中属于 char 类的字符也可以使用类似的语法存储在数组中。这样的数组类似于许多其他编程语言中的字符串。

>> s = ['MATLAB ','is ','fun']
s =
MATLAB is fun

请注意,尽管它们都使用括号 [],但结果类别不同。因此,可以对它们进行的操作也是不同的。

>> whos
  Name      Size            Bytes  Class     Attributes

  A         2x5                80  double              
  s         1x13               26  char                

实际上,数组 s 不是字符串'MATLAB ''is ''fun'的数组,它只是一个字符串 - 一个包含 13 个字符的数组。如果由以下任何一项定义,你将得到相同的结果:

>> s = ['MAT','LAB ','is f','u','n'];
>> s = ['M','A','T','L','A','B,' ','i','s',' ','f','u','n'];

常规的 MATLAB 向量不允许存储不同类或几个不同字符串的变量混合。这就是 cell 阵列派上用场的地方。这是一个单元格数组,每个单元格都可以包含一些 MATLAB 对象,如果需要,它们的类在每个单元格中都可以不同。在元素周围使用花括号 {} 存储在单元格数组中。

>> C = {A; s}
C = 
    [2x5 double]
    'MATLAB is fun'
>> whos C
  Name      Size            Bytes  Class    Attributes

  C         2x1               330  cell 

任何类的标准 MATLAB 对象可以一起存储在单元阵列中。请注意,单元阵列需要更多内存来存储其内容。

使用花括号 {} 来访问单元格的内容。

>> C{1}
ans =
   1.0e+04 *
    0.0001   -0.0002    0.0003    0.0001    1.5625
    0.0003       Inf       Inf       NaN      -Inf

请注意,C(1)C{1} 不同。虽然后者返回单元格的内容(并且在示例中具有类 double),但前者返回一个单元格数组,该数组是 C 的子数组。类似地,如果 D 是一个 10 乘 5 的单元阵列,那么 D(4:8,1:3) 将返回一个 D 的子阵列,其大小为 5 乘 3,其类别为 cell。语法 C{1:2} 没有单个返回的对象,但是 rater 返回 2 个不同的对象(类似于具有多个返回值的 MATLAB 函数):

>> [x,y] = C{1:2}
x =
                         1                        -2                      3.14                       0.8                     15625
          3.14159265358979                       Inf                       Inf                       NaN                      -Inf
y =
MATLAB is fun