How can I extract a slice from a multidimensional array?
27 ビュー (過去 30 日間)
古いコメントを表示
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)
0 件のコメント
採用された回答
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
size(S) % slice
isequal(S,G(:,:,:,r,:,:))
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Matrix Indexing についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!