MATLAB Answers

Translated by

このページのコンテンツは英語から自動翻訳されています。自動翻訳をオフにする場合は「<a class="turn_off_mt" href="#">ここ</a>」をクリックしてください。

Marie
0

Any tips for bsxfun and repeated calculation?

Marie
さんによって質問されました 2017 年 10 月 29 日
最新アクティビティ Cedric Wannaz
さんによって コメントされました 2017 年 10 月 30 日
Hello,
I am currently using bsxfun to subtract the first column from matrix A from matrix A itself, which is straightforward. C=bsxfun(@minus,A,B); Say A= [1 2 3; 3 4 1; 1 5 7] and B = [1 3 1]'
I want to do the same for each column and separately stack up the output vertically one matrix after another. In this example, the resulting matrix would thus be:
D= [0 1 2; 0 1 -2; 0 4 6; -1 0 1; -1 0 -3; -4 0 2; -2 -1 0; 2 3 0; -6 -2 0]
Thanks in advance for any advice.

  0 件のコメント

サインイン to comment.

1 件の回答

回答者: Cedric Wannaz
2017 年 10 月 29 日
編集済み: Cedric Wannaz
2017 年 10 月 29 日
 採用された回答

If you have MATLAB R2016b or above, BSXFUN was replaced by automatic expansion and you can do it as follows:
>> D = repmat( A, 3, 1 ) - A(:)
D =
0 1 2
0 1 -2
0 4 6
-1 0 1
-1 0 -3
-4 0 2
-2 -1 0
2 3 0
-6 -2 0
otherwise, almost the same as your first solution:
>> D = bsxfun( @minus, repmat( A, 3, 1 ), A(:) ) ;
Both are based on the fact that indexing A linearly will read it column first:
>> A(:)
ans =
1
3
1
2
4
5
3
1
7

  2 件のコメント

Marie
2017 年 10 月 30 日
Thank you for the clear reply; much appreciated!
Cedric Wannaz
2017 年 10 月 30 日
My pleasure!

サインイン to comment.



Translated by