【问题标题】:Matlab - insert/append rows into matrix iterativelyMatlab - 迭代地将行插入/追加到矩阵中
【发布时间】:2014-01-03 03:43:54
【问题描述】:

如何在 matlab 中以交互方式附加矩阵和行?

例如,假设我有一个空矩阵:

m = [];

当我运行 for 循环时,我得到了需要插入矩阵的行。

例如:

for i=1:5
  row = v - x; % for example getting 1 2 3
  % m.append(row)?
end

所以插入后应该是这样的:

m = [
     1 2 3
     3 2 1
     1 2 3
     4 3 2
     1 1 1
]

在大多数编程语言中,您可以简单地将行附加到数组/矩阵中。但是我发现在matlab中很难做到。

【问题讨论】:

    标签: matlab for-loop matrix insert rows


    【解决方案1】:

    随便用

    m = [m; row];
    

    考虑到扩展矩阵很慢,因为它涉及内存重新分配。最好将矩阵预分配到完整大小,

    m = NaN(numRows,numCols);
    

    然后在每次迭代时填充行值:

    m(ii,:) = row;
    

    另外,最好将not to use i 作为变量名,因为默认情况下它代表虚数单位(这就是我在这里使用ii 作为迭代索引的原因)。

    【讨论】:

    • 我刚刚使用了 m = NaN(numRows,numCols);作为循环之前的定义,然后是 m(row,:) = row;循环内。就是这样。 tks!
    【解决方案2】:

    m = [m ; new_row]; 在你的循环中。如果您已经知道总行数,请定义m=zeros(row_num,column_num);,然后在您的循环中定义m(i,:) = new_row;

    【讨论】:

    • m=[m,x]m(end+1,:)=x 在追加 s 列时有很大的不同。见this answer。对于行,差异可能没有那么大,我没有比较过,但如果无法预先分配正确大小的矩阵,当然建议追加列而不是行。在许多情况下,可以在不复制数据的情况下追加列。
    【解决方案3】:

    要创建一个值并将其添加到矩阵中,您可以这样做,并且可以制作一个像您这样的完整矩阵。 这里 row = 5 然后是 column = 3 和 for 因此两个 for 循环。

    将值放入M(i, j)位置,它会将值插入矩阵中

    for i=1:5
        for j=1:3
            M(i, j) = input('Enter a value = ')
        end
        fprintf('Row %d inserted successfully\n', i)
    end
    
    disp('Full Matrix is = ')
    disp(M)
    

    可以证明,如果你输入给定的相同值,输出将和你的一样,

    Full Matrix is = 
    1 2 3
    3 2 1
    1 2 3
    4 3 2
    1 1 1
    

    【讨论】:

      猜你喜欢
      • 2023-04-05
      • 2011-04-08
      • 1970-01-01
      • 2016-12-25
      • 2014-04-20
      • 2016-01-26
      • 1970-01-01
      • 1970-01-01
      • 2014-10-22
      相关资源
      最近更新 更多