Subtract column from a matrix

8 visualizzazioni (ultimi 30 giorni)
Mikhail
Mikhail il 25 Set 2014
Commentato: Image Analyst il 26 Set 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.

Risposta accettata

Image Analyst
Image Analyst il 25 Set 2014
You could use repmat() to create an array of the same size:
out = inputArray - repmat(columnVector, [1, m]);
  6 Commenti
Titus Edelhofer
Titus Edelhofer il 26 Set 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 il 26 Set 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)

Accedi per commentare.

Più risposte (1)

Guillaume
Guillaume il 25 Set 2014
Modificato: Guillaume il 25 Set 2014
Use bsxfun, it will expands singleton dimensions:
n = 10; m = 20;
matrix = rand(n, m);
column = rand(n, 1);
bsxfun(@minus, matrix, column)

Categorie

Scopri di più su Mathematics in Help Center e File Exchange

Tag

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by