【问题标题】:How do I make a matrix with uniformly increasing elements without loop如何在没有循环的情况下制作具有均匀增加元素的矩阵
【发布时间】:2017-09-28 11:53:27
【问题描述】:
 0     0     1     1
 1     1     2     2
 2     2     3     3
 3     3     4     4
 4     4     5     5

我想在没有 for 循环的情况下制作像上面这样的矩阵。 我只知道如何用循环来做到这一点。 这是我的代码

x = [0 0 1 1];
for i = 1:4   
    x= [x;x(1,:)+i]
end

有没有像函数':'这样的向量方法?或者以其他方式。 我想知道如何在没有循环的情况下将增加的元素值插入到矩阵行中。

【问题讨论】:

    标签: matlab


    【解决方案1】:

    你可以使用bsxfun:

    result = bsxfun(@plus,x,(0:4).')
    

    在 Matlab 2016b 或更高版本中,您还可以直接扩展单例维度:

    result = x + (0:4).'
    

    【讨论】:

      【解决方案2】:

      您还可以使用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
      

      【讨论】:

        【解决方案3】:

        如果您垂直连接所需的行向量,然后进行转置,您将获得所需的结果(即本例中的x=[0:4;0:4;1:5;1:5]')。

        【讨论】:

        • 这似乎不那么灵活的原始方法...总是尝试假设这样给出的例子是OP想要实现的简化
        • 取决于您想要哪种类型的灵活性 - 如果每列需要增加不同的统一数字,那么这将比原来的更容易。我并不是说这是最好的解决方案,但 SO 的全部优点在于,并非提供的每个答案都必须是最好的(希望最好的答案最终会变得明显)。
        【解决方案4】:

        您可以使用kron + 建议的方法之一here

        kron(hankel(0:4,4:5),[1 1])
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-01-18
          • 1970-01-01
          • 2013-02-07
          • 1970-01-01
          • 2023-03-03
          • 1970-01-01
          • 2019-12-06
          相关资源
          最近更新 更多