# Vectorized operations on multidimensional arrays

1 view (last 30 days)
Mikhail on 7 Feb 2012
Edited: Image Analyst on 2 Oct 2013
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!

Andrei Bobrov on 7 Feb 2012
res = bsxfun(@minus,a,m)
##### 3 CommentsShow 1 older commentHide 1 older comment
Andrei Bobrov on 7 Feb 2012
res = bsxfun(@minus,a,reshape(m,1,1,[]))
or
res = bsxfun(@minus,a,permute(m,[1 3 2]))
http://www.mathworks.com/help/techdoc/ref/reshape.html
http://www.mathworks.com/help/techdoc/ref/permute.html
Mikhail on 7 Feb 2012
Thanks again!

### Categories

Find more on Matrix Indexing in Help Center and File Exchange

### Community Treasure Hunt

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

Start Hunting!