【问题标题】:Problem with creating a single row matrix创建单行矩阵的问题
【发布时间】:2020-04-25 22:15:08
【问题描述】:

我有这个 for 循环,它创建一个 1825 列的矩阵。该矩阵包含一个范围从 0 到 1 的值,增量为 0.013888888889,步长为 25(因此,在 25 个零之后,它变为 0.013888888889,然后在 25 次之后再次增加)。我的问题是没有创建包含 1 的最后 25 列。而不是1x1825 的矩阵,我得到一个1x1800 没有1 的矩阵。这是代码:

coutput=repmat([0], 1,25);
for n=0.013888888889:0.013888888889:1 

    coutput = [coutput repmat([n],1,25)];

end

【问题讨论】:

    标签: arrays matlab for-loop matrix


    【解决方案1】:

    正如 HansHirse 上面指出的,这是一个四舍五入的问题。不应将浮点值用作循环索引。

    实现循环的简单而正确的方法是:

    
    for n=1:72
       n = ii/72;
       %...
    end
    

    当然,这段代码使用 Hans 的 repmat+reshape 解决方案会更有效率,因为它避免了在循环内重复重新分配输出数组。

    【讨论】:

      【解决方案2】:

      问题来自你的循环变量:

      n = 0.013888888889:0.013888888889:1 
      

      我们比较一下:

      temp = 0:0.013888888889:1;
      temp([1 2 end-1 end])
      
      n = 72;
      temp = linspace(0, 1, n+1);
      temp([1 2 end-1 end])
      

      我们得到:

      ans =
         0.00000   0.01389   0.97222   0.98611
      
      ans =
         0.00000   0.01389   0.98611   1.00000
      

      使用您的解决方案,我们得到一个维度为1x72 的向量,而“更精确”的版本给出了一个维度为1x73 的向量。所以,最后,这是一个四舍五入的问题。

      剩下的部分可以用你的repmatreshape来简化:

      k = 25;
      out = reshape(repmat(temp, k, 1), 1, (n+1) * k)
      

      (此处省略输出。)

      希望有帮助!

      【讨论】:

        猜你喜欢
        • 2021-02-16
        • 2019-10-07
        • 1970-01-01
        • 1970-01-01
        • 2015-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多