## Any tips for bsxfun and repeated calculation?

Marie

### Marie (view profile)

さんによって質問されました 2017 年 10 月 29 日

### Cedric Wannaz (view profile)

さんによって コメントされました 2017 年 10 月 30 日
Cedric Wannaz

### Cedric Wannaz (view profile)

さんの 回答が採用されました
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]

#### 0 件のコメント

サインイン to comment.

## 1 件の回答

2017 年 10 月 29 日

### Cedric Wannaz (view profile)

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

Marie

### Marie (view profile)

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

### Cedric Wannaz (view profile)

2017 年 10 月 30 日
My pleasure!

サインイン to comment.

Translated by