【问题标题】:'horizontal dimensions mismatch' error when adding row of ones to matrix in Octave在 Octave 中将一行添加到矩阵时出现“水平尺寸不匹配”错误
【发布时间】:2018-05-18 06:52:45
【问题描述】:

我正在尝试将一行 1 添加到预先存在的矩阵中。我想知道为什么下面的代码不起作用,我应该怎么做。

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

为什么这个方法对添加列有效,而对添加行无效?我应该使用什么其他方法向我的矩阵添加一行?

【问题讨论】:

  • 这个示例来自 Andrew 的 ML 课程,我也遇到过这样的问题 :D

标签: matrix octave


【解决方案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 行的列,因此出现维度不匹配错误。

【讨论】:

    【解决方案2】:

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

    [ A ; B ] 垂直连接 AB

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多