Subtract column from a matrix

9 visualizaciones (últimos 30 días)
Mikhail
Mikhail el 25 de Sept. de 2014
Comentada: Image Analyst el 26 de Sept. de 2014
In matlab it is easy to subtract number from column or row. I want to subtract column [n x 1] from a matrix [n x m]. Is it possible to doit without for loop? When I wrote it just with '-', there was dimension mismatch error. Thanks.
  1 comentario
Stephen23
Stephen23 el 26 de Sept. de 2014
Use bsxfun . This is exactly what it is for.

Iniciar sesión para comentar.

Respuesta aceptada

Image Analyst
Image Analyst el 25 de Sept. de 2014
You could use repmat() to create an array of the same size:
out = inputArray - repmat(columnVector, [1, m]);
  6 comentarios
Titus Edelhofer
Titus Edelhofer el 26 de Sept. de 2014
Nice comparison!
One aspect has not been mentioned yet: for larger matrices/vectors the memoryfriendliness of bsxfun compared to repmat (which blows up the memory usage significantly).
Titus
Image Analyst
Image Analyst el 26 de Sept. de 2014
Good point. This can be done by adding these lines into the loop:
memoryUsed = memory;
fprintf('Memory used by MATLAB = %d bytes.\n', memoryUsed.MemUsedMATLAB)

Iniciar sesión para comentar.

Más respuestas (1)

Guillaume
Guillaume el 25 de Sept. de 2014
Editada: Guillaume el 25 de Sept. de 2014
Use bsxfun, it will expands singleton dimensions:
n = 10; m = 20;
matrix = rand(n, m);
column = rand(n, 1);
bsxfun(@minus, matrix, column)

Categorías

Más información sobre Mathematics en Help Center y File Exchange.

Etiquetas

Productos

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by