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

 采纳的回答

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 个评论

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

请先登录,再进行评论。

更多回答(0 个)

类别

帮助中心File Exchange 中查找有关 Resizing and Reshaping Matrices 的更多信息

产品

标签

Community Treasure Hunt

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

Start Hunting!

Translated by