how to extract elements along specified dimension of array
57 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
when e.g. selecting all elements in the 2nd dimension and the first element of all remaining dimensions of an array, for a 3-dimensional array one would write: A(1,:,1)
how to program this elegantly when the dimension over which I want the elements (2 in the example) is a variable itself, whose value is unknown until runtime ?
thanks!!
0 commentaires
Réponse acceptée
Jonathan Sullivan
le 16 Mar 2012
A = rand(100,100,10,10);
dim = 4;
sz = size(A);
inds = repmat({1},1,ndims(A));
inds{dim} = 1:sz(dim);
A(inds{:})
Plus de réponses (2)
per isakson
le 15 Mar 2012
A(ixi,ixj,ixk)
where ixi,ixj,and ixk are numerical vectors (/scalar) of integers. ":" would correspond to (1:number_of_element_in_dimension). Or with logical indexing
A(isi,isj,isk)
where isi,isj,isk are logical vectors all with the length "number_of_element_in_dimension". ":" would be true(1,number_of_element_in_dimension).
The elegance will be in the calculation of ixi,ixj,and ixk or isi,isj,isk.
0 commentaires
Walter Roberson
le 15 Mar 2012
Something like this,
DIM = 2; %changed at runtime
idxexpr = { repmat({1}, 1, DIM - 1), {':'}, repmat({1}, 1, ndim(A)-DIM) };
A(idxexpr{:})
3 commentaires
Walter Roberson
le 15 Mar 2012
I have done it successfully before, my post is either on the newsgroup or somewhere in Answers. _Finding_ the post would take longer than reinventing it!
Try
idxexpr = [num2mat(ones(1,DIM-1)), {':'}, num2mat(ones(1,ndim(A)-DIM))];
Voir également
Catégories
En savoir plus sur Matrix Indexing dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!