How can I extract a slice from a multidimensional array?

I have an array of variable dimensions and want to extract a slice of it.
If I the size of the array was fixed I would like to do:
result = G(:,:,:,r,:,:);
But in my case, r is a variable and so are the dimensions of G and the dimension from which I want to extract the slice (in this case the 4th dimension).
-----------------------------------
I am able to costruct a cell array containing the indices that need to be extracted, but can't extract them.
N = ndims(G);
other_dimensions = [1:(n-1),(n+1):N];
sz = size(G);
inds = repmat({r},1,ndims(G));
for k = 1:length(other_dimensions)
inds{other_dimensions(k)} = 1:sz(other_dimensions(k));
end
result = A(inds) % (not working)

 채택된 답변

Stephen23
Stephen23 2021년 2월 27일
편집: Stephen23 2021년 2월 27일
The trick here is to define a cell array and then use a comma-separated list for the indices. For example:
G = rand(7,6,5,4,3,2); % any size
d = 4; % which dimension
r = 3; % index in that dim.
% define cell array:
C = repmat({':'},1,ndims(G));
C{d} = r;
% comma-separated list to supply indices:
S = G(C{:}); % get slice!
% check:
size(G) % original array
ans = 1×6
7 6 5 4 3 2
size(S) % slice
ans = 1×6
7 6 5 1 3 2
isequal(S,G(:,:,:,r,:,:))
ans = logical
1

댓글 수: 1

Thank you for your answer! I realized I could change 1:sz(other_dimensions(k)) for ':' in my code and solve the problem as well. I.e.,
N = ndims(G);
other_dimensions = [1:(n-1),(n+1):N];
sz = size(G);
inds = repmat({r},1,ndims(G));
for k = 1:length(other_dimensions)
inds{other_dimensions(k)} = ':';
end
result = A(inds) % (now it works)

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Matrix Indexing에 대해 자세히 알아보기

제품

릴리스

R2020a

질문:

2021년 2월 26일

댓글:

2021년 3월 1일

Community Treasure Hunt

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

Start Hunting!

Translated by