如何使矩阵均匀增加元素而没有循环


 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])

最新更新