0 0 1 1
1 1 2 2
2 2 3 3
3 3 4 4
4 4 5 5
我想在不循环的情况下制作像上面的矩阵。我只知道如何使用循环进行。这是我的代码
x = [0 0 1 1];
for i = 1:4
x= [x;x(1,:)+i]
end
在函数之类的向量中是否有办法':'?或其他方式。我想知道如何将增加的元素值插入无环的矩阵行中。
您可以使用bsxfun
:
result = bsxfun(@plus,x,(0:4).')
在MATLAB 2016b或更新中,您也可以直接扩展单例维度:
result = x + (0:4).'
您也可以使用cumsum
累计汇总列。因此,创建您的启动向量,并在其他行下面使用一个矩阵。
cumsum([0 0 1 1; ones(4,4)]) % ones(n-1, 4) for result with n rows, input 4 columns
这具有能够轻松完成其他步骤尺寸
的优点cumsum([0 0 1 1; 2*ones(4,4)]) % steps of 2
此外,如果我们使用repmat
% Row one ↓ interval per col ↓
cumsum([0 0 1 1; repmat([1 2 3 4], 4, 1)]); % Again, use n-1 in place of 4
如果您垂直串联所需的行向量,然后进行转置,则将获得所需的结果(即在此示例中x=[0:4;0:4;1:5;1:5]'
)。
您可以使用KRON 此处建议的一种方法。
kron(hankel(0:4,4:5),[1 1])