Substract nd array slices
Mostrar comentarios más antiguos
Hi,
I have a n-dimensional array which may contain singleton dimensions and I would like to substract the second page of dimension i from the first page of dimension i. My current solution looks something like this:
function A = substract_page( A, dim )
orig_size = size(A); % store the original shape
A = shiftdim(A, dim); % shift the dimension to be substracted to the end
shifted_size = size(A); % aliter: shifted_size = circshift orig_size(dim); ?
A = reshape(A, [], shifted_size(end)); % collapse first dimensions for easier substraction
A = A(:, 2) - A(:, 1);
shifted_size(end) = shifted_size(end) - 1; % substraction leads to dimension loss
A = reshape(A, shifted_size); % restore shape
lost_dimensions = length(orig_size) - ndims(A);
A = shiftdim(A, -lost_dimensions); % make sure that singular dimensions in the end don't get lost
A = shiftdim(A, length(orig_size) - dim + lost_dimensions); % restore order
end
But it seems way to complicated and I feel there is a much easier and more elegant solution.
Respuesta aceptada
Más respuestas (1)
Matt J
el 12 de Nov. de 2017
Not sure, but maybe you are looking for
A=diff(A,1,dim);
1 comentario
Orangelynx
el 13 de Nov. de 2017
Categorías
Más información sobre Logical en Centro de ayuda y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!