Subtract column from a matrix

2 vues (au cours des 30 derniers jours)
Mikhail
Mikhail le 25 Sep 2014
Commenté : Image Analyst le 26 Sep 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 commentaire
Stephen23
Stephen23 le 26 Sep 2014
Use bsxfun . This is exactly what it is for.

Connectez-vous pour commenter.

Réponse acceptée

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

Connectez-vous pour commenter.

Plus de réponses (1)

Guillaume
Guillaume le 25 Sep 2014
Modifié(e) : Guillaume le 25 Sep 2014
Use bsxfun, it will expands singleton dimensions:
n = 10; m = 20;
matrix = rand(n, m);
column = rand(n, 1);
bsxfun(@minus, matrix, column)
  1 commentaire
Mikhail
Mikhail le 25 Sep 2014
Thanks

Connectez-vous pour commenter.

Catégories

En savoir plus sur Mathematics dans Help Center et File Exchange

Tags

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by