MATLAB空数组

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() 函数测试一个返回值是否是空数组,例如:
>> isempty(y)
ans =
    1

由于空数组也存在维数(如前面创建的 c 为 0×5 的数组),在 MATLAB 中,不同维数的空数组之间是不能进行比较的,因此,验证一个数组是否是空数组时,最好不要使用关系运算,建议使用 isempty() 函数。

例如,要验证前面创建的 c 是否是空数组,只能采用 isempty() 函数,代码如下:
>> c==[]  %用一个 0×5 的数组和一个 0×0 的数组比较会出错
错误使用  ==
矩阵维度必须一致。

>> isempty(c)  %isempty()返回所需的结果
ans =
    1

当用户确认空数组是最简单的空数组[ ]时,关系运算也成立,只不过运算结果仍是空数组,例如:
>> a=[];  %创建空数组
>> a==[]  %比较大小相等的空数组仍然会得到一个空数组
ans =
    []

也可以将一个非空数组与一个空数组进行比较,结果返回一个空数组,例如:
>> b=1;  %创建非空变量
>> b==[]  %将非空变量与空变量进行比较会产生空结果
ans =
    []

>> b~=[]  %即使不相等的比较也会产生空结果
ans =
    []
由上面的例子可以看出,对空数组执行关系运算时,要么返回一个错误信息(如在两个不同维数的空数组之间进行比较时),要么返回一个空数组(如前面的两个例子),这通常都不是我们想要的结果,因此,当有空数组出现时,建议用户使用 isempty() 函数,尽量不要使用关系运算。