什么是`end + 1`行在这里做什么?

时间:2013-06-01 19:57:35

标签: matlab

考虑下面的MATLAB代码:

degree = 6;
out = ones(size(X1(:,1)));
for i = 1:degree
    for j = 0:i
        out(:, end+1) = (X1.^(i-j)).*(X2.^j);
    end
end

我不确定我是否看到end+1索引是如何运作的。此代码中没有先前定义的名为end的变量。

2 个答案:

答案 0 :(得分:4)

end写为下标等同于在指定维度中编写数组中最后一个元素的索引,如official documentation中所述:

  

end函数也可作为索引表达式中的最后一个索引   在该上下文中,end = (size(x,k))用作k索引的一部分。此用法的示例包括X(3:end)X(1,1:2:end-1)使用end生成数组时,如X(end+1)=5中所示,请确保X首先存在。

在您的情况下(以粗体突出显示),out(:, end+1)表示矩阵out在第二维中增长,每次迭代为i

答案 1 :(得分:2)

end是Matlab中的关键字,可以使用数组索引,并且始终表示该维度中的最后一个元素。

所以out(:, end)是最后一列。 out(end, :)是最后一行。 out(1, end)是第一行中的最后一个元素。

在这里,当out(:, end+1)引用超过矩阵末尾的列时,分配会自动增大矩阵,将刚刚计算的向量作为新列添加到右侧。