MATLAB Answers

Any tips for bsxfun and repeated calculation?

조회 수: 1(최근 30일)
Marie
Marie 29 Oct 2017
댓글: Cedric Wannaz 30 Oct 2017
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.

채택된 답변

Cedric Wannaz
Cedric Wannaz 29 Oct 2017
편집: Cedric Wannaz 29 Oct 2017
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
Cedric Wannaz
Cedric Wannaz 30 Oct 2017
My pleasure!

댓글을 달려면 로그인하십시오.

추가 답변(0개)

Community Treasure Hunt

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

Start Hunting!

Translated by