How do I subtract variable dimension arrays

Right now I do this:
dx = dists(2:end,1,:) - dists(1:end-1,1,:);
dy = dists(2:end,2,:) - dists(1:end-1,2,:);
dz = dists(2:end,3,:) - dists(1:end-1,3,:);
where:
>>size(dists)
ans =
13 9 1159
I would like to do this where dists could be (13,9,1159,8) or an arbitrarily larger dimensions tacked on to the end. The two arrays I'm subtracting would always be the same size and the same particular slices would be subtracted. (as you can see, I'm just subtracting the 1st from 2nd, 2nd from 3rd, etc along three columns in three vector calcs)
How would I specify that for arbitrarily larger dimensions instead of an if statement on size and then ':', or ':,:', or ':,:,:', etc.?

 Respuesta aceptada

Sean de Wolski
Sean de Wolski el 1 de Oct. de 2013
Use diff specifying the dimension:
dists = rand(100,4,23);
drow = diff(dists,1,1); %rows first dimension
dcol = diff(dists,1,2); %column second dimension
dpage = diff(dists,1,3); %pages third dimension
Now you could just loop over the dimensions and store the results in a cell array.

1 comentario

Kevin
Kevin el 1 de Oct. de 2013
That worked perfectly! I wasn't familiar with diff but thanks to you, now I am.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Productos

Etiquetas

Preguntada:

el 1 de Oct. de 2013

Comentada:

el 1 de Oct. de 2013

Community Treasure Hunt

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

Start Hunting!

Translated by