Any tips for bsxfun and repeated calculation?
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
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 Kommentare
Akzeptierte Antwort
Cedric
am 29 Okt. 2017
Bearbeitet: Cedric
am 29 Okt. 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 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!