这里是我的代码:
aaa = [];
bbb = [];
for ii = 1:10
[aaa(:,:,end+1), bbb(:,end+1)] = myfunction();
end
函数myfunction
:
function [aaa, bbb] = myfunction()
aaa = rand(5,3);
bbb = rand(5,1);
end
我知道我可以使用ii
将变量的输出发送到aaa
和bbb
[aaa(:,:,ii), bbb(:,ii)] = myfunction()
。我只是想知道为什么aaa
我生成一个5x3x11矩阵(不应该是5x3x10?)?对于bbb
,它会正确生成5x10矩阵。因此,为什么end + 1
适用于bbb
而不适用aaa
?
答案 0 :(得分:3)
我认为这与MATLAB如何定义空矩阵有关。如果你size(aaa)
,MATLAB将返回0 0
,如你所料。 size(bbb)
返回相同的内容。但是,如果您明确尝试使用size(aaa,3)
查找第3维的大小,则MATLAB将返回1
。因此,似乎MATLAB将空矩阵定义为在前两个维度中具有零大小,并且在所有其他维度中大小为1.
这意味着当您执行a(:,:,end+1)
时,您实际上正在访问a(:,:,2)
,因为a
的第三维度的结尾是1,即使它是空的。 b
没有这个问题,因为它只是二维的,而空矩阵的第二维的末尾是零。
编辑:顺便说一句,如果你要在一个循环中为它们赋值,你应该总是预先分配你的矩阵(我相信MATLAB会抱怨这个)。如果不这样做,则必须在每次循环迭代时调整矩阵的大小,通常会导致执行时间变慢。
答案 1 :(得分:0)