Create a 3D Martix by operation of 1D vector on 2D matrix, using cat()

Given a 2D matrix A, and a 1D vector B, I would like to create a 3D Martix, with 2D slices of A minus each element of B.
So for a B of length 4, this works:
cat(3, A-B(1), A-B(2), A-B(3), A-B(4)))
The actual dimensions will be around A(40000,7), B(150), so I need to be able to do this for a given size of B

 Accepted Answer

A = rand(10,5);
B = 1:3;
C = bsxfun(@minus, A, permute(B, [3 1 2]));
If B is a column vector (instead of a row vector), the permute would be
C = bsxfun(@minus, A, permute(B, [3 2 1]));

1 Comment

Thanks, that's great, I tried bsxfun, but hadn't been using permute. This works perfectly.

Sign in to comment.

More Answers (0)

Products

Community Treasure Hunt

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

Start Hunting!