【问题标题】:Add a row to a matrix向矩阵添加一行
【发布时间】:2011-12-22 22:21:14
【问题描述】:

我有一个矩阵A 喜欢

1 2 3 4 5
6 7 8 9 0

我想用一行来扩展它来得到

1 1 1 1 1
1 2 3 4 5
6 7 8 9 0 

我用

创建一行
col_size = size(A, 2); 
ones_row = ones(1, col_size);

如何将我的ones_row 添加到矩阵中?

【问题讨论】:

    标签: matlab matrix concatenation row addition


    【解决方案1】:

    一旦您拥有Aones_row,您就可以:

    [ones_row; A]
    

    这将返回以下内容。

    1 1 1 1 1
    1 2 3 4 5
    6 7 8 9 0
    

    【讨论】:

    • 这行得通。但就效率而言,它是最佳解决方案吗?
    • 您好,我有 $m\times n$ 阶的矩阵 $A,B$,我想编写一个矩阵,只需将它们逐行添加即可得到 $2m\times 2n$ 矩阵,什么我应该这样做吗?
    • 我要补充一点,[ e1 ; e2 ] 转换为 vertcat,而 [ e1 e2 ][ e1, e2 ] 转换为 horzcat。熟悉cat 以沿任何维度进行显式连接也很有用。
    【解决方案2】:

    我可能会按照in the previous answer 的建议进行操作,但是在某些情况下(当矩阵大小变得非常大时),对内存更友好的解决方案是预先分配正确大小的矩阵并使用索引来放置现有的正确位置的值:

    A = [ 1 2 3 4 5; 6 7 8 9 0 ];
    B = ones(size(A) + [1,0]); % Create an array of ones that is one row longer
    B(2:end,:) = A;            % Replace the elements of B with elements from A
    

    我说这对内存更友好的原因是因为当我们创建一行时,我们需要为向量分配内存,然后当我们连接时,我们需要再次为串联的结果。当我们使用索引时,不需要分配中间向量。在此示例中它并不重要,但对于较大的矩阵或执行数千次的操作可能非常重要。


    Image Processing Toolbox - padarray 中还有一个有用的功能:

    A = [ 1 2 3 4 5; 6 7 8 9 0 ];
    B = padarray(A,[1 0],1,'pre');
    

    【讨论】:

      【解决方案3】:

      我可以给出一个适用于任何矩阵的解决方案。

      假设你的矩阵是A,A 是m*n

      n = size(A,2)
      
      out = [ones(1,n);A]
      

      此解决方案适用于任何矩阵。

      【讨论】:

      • 如果 A 有 n 列,则不能将它与只有一列的行连接。请再次阅读问题。
      • 再次阅读我的答案,它与 A 的大小没有任何关系。A 可以有 n 列。专注是真的,可以在MATLAB中测试。
      • 举个例子:A = rand(5,6);n = size(A,2);out = [ones(n,1);A];使用vertcat时出错。被连接的数组的维度不一致。`
      • 编辑后,您的答案正是 David Alber 已经发布的内容。这没有给帖子增加任何新内容。在添加您的答案之前,请阅读已经发布的答案。谢谢
      • @PyMatFlow Urgent 的评论完全无关紧要,它应该是一个新问题(如果有的话)。原始问题已经包含 size(A, 2)ones(1, ..); - 这就是为什么 Sardar 说你的回答没有增加任何新内容。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-06
      • 2022-07-08
      • 2012-03-24
      • 2013-08-15
      相关资源
      最近更新 更多