问题在于您初始化的方式a
。考虑以下:
>> a = []; % equivalent to zeros(0,0)
>> [m,n,p] = size(a)
m =
0
n =
0
p =
1
这在size
函数的文档中有解释:
[d1,d2,d3,...,dn] = size(X)
, 对于, 返回变量n > 1
中数组维度的大小,前提是输出参数的数量等于。如果不等于
,则以下异常成立:X
d1,d2,d3,...,dn
n
ndims(X)
n
ndims(X)
n > ndims(X)
: size 返回“额外”变量中的值,即那些对应于ndims(X)+1
through的值n
。
大小用于end
计算返回的索引。为了看到这一点,我们可以end
用我们的自定义版本重载该函数:
@double\end.m
function ind = end(a, k, n)
ind = builtin('end',a,k,n);
keyboard
end
将上述函数保存在路径上的某个位置,调用:
>> a = [];
>> a(:,:,end+1) = ones(2);
您将看到ind
返回的计算索引end
为 1,然后将其递增 1,从而end+1
导致a(:,:,2)=ones(2)
开头的额外空间被零填充。
要解决此问题,请正确初始化矩阵:
>> a = zeros(0,0,0);
>> a(:,:,end+1) = ones(2);