同一类的元素通常可以连接成数组(有一些罕见的例外,例如函数句柄)。数值标量(默认为class 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
char在MATLAB中属于类的字符也可以使用类似的语法存储在数组中。这样的数组类似于许多其他编程语言中的字符串。
>> 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}没有单个返回的对象,但是评分器返回两个不同的对象(类似于具有多个返回值的MATLAB函数):
>> [x,y] = C{1:2} x = 1 -2 3.14 0.8 15625 3.14159265358979 Inf Inf NaN -Inf y = MATLAB is fun