Добавление строки в матрицу
у меня есть матрица 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 = [ 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]
Это решение работает для любой матрицы.