单元格阵列
同一个类的元素通常可以连接成数组(有一些罕见的例外,例如函数句柄)。默认情况下,类 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