Ошибка «несоответствия горизонтальных размеров» при добавлении ряда единиц в матрицу в октаве - PullRequest
0 голосов
/ 18 мая 2018

Я пытаюсь добавить ряд единиц в уже существующую матрицу.Я хочу знать, почему следующий код не работает, и что я должен сделать вместо этого.

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

Однако, если бы я хотел добавить столбец единиц в уже существующую матрицу, я мог бы сделать этолегко без получения сообщения об ошибке, используя практически тот же метод, что и выше.

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 голосов
/ 18 мая 2018

[ A B ] совпадает с [ A , B ] и объединяет A и B по горизонтали.

[ A ; B ] объединяет A и B по вертикали.

См. официальную документацию MATLAB по сцеплению .(Я знаю, что вы используете Octave, это тот же синтаксис.)

0 голосов
/ 18 мая 2018

Вы можете добавить строку, используя следующий синтаксис:

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 строками, следовательно, ошибка несоответствия размеров.

...