向矩阵中添加一行

20

我有一个像这样的矩阵 A

1 2 3 4 5
6 7 8 9 0

我想要在它的基础上添加一行1以获得

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

我使用以下代码创建了一个全为1的行:

col_size = size(A, 2); 
ones_row = ones(1, col_size);

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

3个回答

42

一旦你拥有Aones_row,你可以执行以下操作:

[ones_row; A]

这将返回以下内容。

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

1
这个可行。但就效率而言,它是否是最佳解决方案呢? - JustCurious
你好,我有一个$m\times n$阶的矩阵$A,B$,我想编写一个程序将它们按行相加,以得到一个$2m\times 2n$的矩阵,请问应该怎么做? - Marso
我想补充一下,[ e1 ; e2 ] 被翻译为 vertcat,而 [ e1 e2 ][ e1, e2 ] 则被翻译为 horzcat。同时,学习使用 cat 可以在任意维度上进行显式拼接,这也是非常有用的。 - Dev-iL

2

我会按照之前答案中所建议的方式来完成,但在某些情况下(当矩阵大小变得非常大时),更节省内存的解决方案是预先分配正确大小的矩阵,并使用索引将现有值放置在正确的位置:

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

我之所以说这种方法更节省内存,是因为当我们创建一个全1行时,需要为向量分配内存,然后在拼接时需要再次分配内存。而使用索引时,无需分配中间向量的内存。虽然在这个例子中不是很重要,但是对于更大的矩阵或执行数千次的操作来说,可能会显著影响性能。
还有一个有用的函数在图像处理工具箱中 - padarray:
A = [ 1 2 3 4 5; 6 7 8 9 0 ];
B = padarray(A,[1 0],1,'pre');

-1
我可以提供一个适用于任何矩阵的解决方案。 假设你的矩阵是A,A是m*n
n = size(A,2)

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

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


请再次阅读我的回答,它与A的大小没有任何关系。A可以有n列。集中是正确的,您可以在MATLAB中进行测试。 - PyMatFlow
1
举个例子:A = rand(5,6); n = size(A,2); out = [ones(n,1);A]; 使用vertcat时出错。要连接的数组维度不一致。 - Sardar Usama
1
现在编辑后,你的回答与David Alber已经发布的内容完全相同。这对帖子没有任何新的贡献。请在添加您的回答之前先阅读已发布的回答。谢谢。 - Sardar Usama
所以你决定提供完全相同的解决方案,只是使用不同的变量名称。好的。 - Sardar Usama
1
@PyMatFlow Urgent的评论完全无关紧要,如果有什么问题应该是一个新问题。原始问题已经包含了size(A, 2)ones(1, ..); - 这就是为什么Sardar说你的答案没有任何新内容。 - Dev-iL
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接