'水平尺寸不匹配'在Octave中向矩阵添加一行1时出错

时间:2018-05-17 21:28:10

标签: matrix octave

我试图在预先存在的矩阵中添加一行。我想知道为什么以下代码不起作用,而我应该做什么。

A = zeros(25, 5000);
A = [ones(1, columns(A)) A]
% I get an error message: "horizontal dimensions mismatch (1x5000 vs 25x5000)"

但是,如果我想将一列1添加到预先存在的矩阵中,我可以轻松地执行此操作而不会收到错误消息,使用与上述失败相同的方法。

A = zeros(25, 5000);
A = [ones(rows(A), 1) A]
% no error message, A becomes a 25x5001 matrix with the first column as a column of ones

为什么此方法可用于添加列但无法添加行?我应该使用哪种方法在我的矩阵中添加一行?

2 个答案:

答案 0 :(得分:1)

您可以使用以下语法添加行:

A = [A; ones(1, columns(A))] % the key here is the semicolon

它适用于列的原因是因为矩阵尺寸。假设您有一个包含m行和n列的矩阵,现在您可以使用以下内容轻松地将包含m行的单个列添加到矩阵中:

A = [ones(rows(A), 1) A] % dimensions match

现在,使用以下语法:

A = [ones(1, columns(A)) A]

您正在尝试添加n行的列,因此尺寸不匹配错误。

答案 1 :(得分:0)

[ A B ][ A , B ]相同,并水平连接AB

[ A ; B ]垂直连接AB

the official MATLAB documentation on concatenation。 (我知道你正在使用Octave,它的语法相同。)