Vectorized operations on multidimensional arrays

Hi,
Say, there is 3D array a:
a(:,:,1) =
56 123
48 242
a(:,:,2) =
206 30
188 26
a(:,:,3) =
251 138
167 8
And 3D array m:
m(:,:,1) =
117.2500
m(:,:,2) =
112.5000
m(:,:,3) =
141
How do I subtract m(:,:,1:3) from a(:,:,1:3) in a vectorized manner? I.e. do something like
for k=1:length(a), res(:,:,k)=a(:,:,k)-m(:,:,k); end
The result should be:
res(:,:,1) =
-61.2500 5.7500
-69.2500 124.7500
res(:,:,2) =
93.5000 -82.5000
75.5000 -86.5000
res(:,:,3) =
110 -3
26 -133
Thank you!

 Akzeptierte Antwort

Andrei Bobrov
Andrei Bobrov am 7 Feb. 2012
res = bsxfun(@minus,a,m)
please read about function bsxfun

3 Kommentare

Mikhail
Mikhail am 7 Feb. 2012
Awesome, thanks! Now, how about if m was as following?
m =
117.2500 112.5000 141
res = bsxfun(@minus,a,reshape(m,1,1,[]))
or
res = bsxfun(@minus,a,permute(m,[1 3 2]))
please read:
http://www.mathworks.com/help/techdoc/ref/reshape.html
http://www.mathworks.com/help/techdoc/ref/permute.html
Mikhail
Mikhail am 7 Feb. 2012
Thanks again!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by