Добавление строки в матрицу

у меня есть матрица 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 к матрице?

3 ответов


после A и ones_row вы:

[ones_row; A]

возвращает следующее.

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

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

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

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


есть также полезная функция в Обработка Изображений Toolbox - padarray:

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

Я могу дать решение, которое может работать на любом матрицы.

предположим, что ваша матрица A, а m*n

n = size(A,2)

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

Это решение работает для любой матрицы.