Subtract column from a matrix

9 ビュー (過去 30 日間)
Mikhail
Mikhail 2014 年 9 月 25 日
コメント済み: Image Analyst 2014 年 9 月 26 日
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 件のコメント
Stephen23
Stephen23 2014 年 9 月 26 日
Use bsxfun . This is exactly what it is for.

サインインしてコメントする。

採用された回答

Image Analyst
Image Analyst 2014 年 9 月 25 日
You could use repmat() to create an array of the same size:
out = inputArray - repmat(columnVector, [1, m]);
  6 件のコメント
Titus Edelhofer
Titus Edelhofer 2014 年 9 月 26 日
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 2014 年 9 月 26 日
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)

サインインしてコメントする。

その他の回答 (1 件)

Guillaume
Guillaume 2014 年 9 月 25 日
編集済み: Guillaume 2014 年 9 月 25 日
Use bsxfun, it will expands singleton dimensions:
n = 10; m = 20;
matrix = rand(n, m);
column = rand(n, 1);
bsxfun(@minus, matrix, column)
  1 件のコメント
Mikhail
Mikhail 2014 年 9 月 25 日
Thanks

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeMathematics についてさらに検索

タグ

製品

Community Treasure Hunt

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

Start Hunting!

Translated by