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

 Respuesta aceptada

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 comentario

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

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Productos

Preguntada:

el 25 de Jul. de 2014

Comentada:

el 25 de Jul. de 2014

Community Treasure Hunt

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

Start Hunting!

Translated by