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.?

 Akzeptierte Antwort

Sean de Wolski
Sean de Wolski am 1 Okt. 2013

0 Stimmen

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 Kommentar

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

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Produkte

Tags

Gefragt:

am 1 Okt. 2013

Kommentiert:

am 1 Okt. 2013

Community Treasure Hunt

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

Start Hunting!

Translated by