MATLAB 空数组是开发人员定义的一个数据类型(这一点与 MATLAB NaN 不同,因为 NaN 是由 IEEE 标准定义的),它指有一维或多维的长度为 0 的数组变量。空数组的表达方式也很多,最简单的一种是直接用两个方括号表示的数组,即[ ]数组。
例如,下面的代码给出了几种空数组的创建方式,并用 size 或 length 查看了它们的维数或长度。
>> size([]) %最简单的空数组
ans =
0 0
>> c=zeros(0,5) %一个多列的空数组
c =
空的 0×5 double 矩阵
>> size(c)
ans =
0 5
>> d=ones(4,0) %一个多行的空数组
d =
空的 4×0 double 矩阵
>> size(d)
ans =
4 0
>> length(d) %即使它有4行,但是它的长度还是为零,
ans =
0
使一个数组的维数为 0 也许会让读者感到困惑,但这在许多运算中是非常有用的,随着本节的深入,读者会对其有更深的了解。
空数组有时也出现在一些函数的返回参数中。在 MATLAB 中,很多函数在无法返回适当结果时,往往会返回空数组。
其中最典型的一个函数就是 find() 函数,下面给出了一个具体的例子。
>> x=-2:2
x =
-2 -1 0 1 2
>> y=find(x>2)
y =
空的 1×0 double 行矢量
在这个例子中,数组 x 中不存在大于 2 的值,因此找不到正确的索引值,于是 find 就返回一个空数组。
可以使用 isempty() 函数测试一个返回值是否是空数组,例如:
由于空数组也存在维数(如前面创建的 c 为 0×5 的数组),在 MATLAB 中,不同维数的空数组之间是不能进行比较的,因此,验证一个数组是否是空数组时,最好不要使用关系运算,建议使用 isempty() 函数。
例如,要验证前面创建的 c 是否是空数组,只能采用 isempty() 函数,代码如下:
>> c==[] %用一个 0×5 的数组和一个 0×0 的数组比较会出错
错误使用 ==
矩阵维度必须一致。
>> isempty(c) %isempty()返回所需的结果
ans =
1
当用户确认空数组是最简单的空数组[ ]时,关系运算也成立,只不过运算结果仍是空数组,例如:
也可以将一个非空数组与一个空数组进行比较,结果返回一个空数组,例如:
>> b=1; %创建非空变量
>> b==[] %将非空变量与空变量进行比较会产生空结果
ans =
[]
>> b~=[] %即使不相等的比较也会产生空结果
ans =
[]
由上面的例子可以看出,对空数组执行关系运算时,要么返回一个错误信息(如在两个不同维数的空数组之间进行比较时),要么返回一个空数组(如前面的两个例子),这通常都不是我们想要的结果,因此,当有空数组出现时,建议用户使用 isempty() 函数,尽量不要使用关系运算。