how to extract elements along specified dimension of array

57 vues (au cours des 30 derniers jours)
Peter
Peter le 15 Mar 2012
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!!

Réponse acceptée

Jonathan Sullivan
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{:})
  1 commentaire
Peter
Peter le 16 Mar 2012
thanks a lot. exactly what i needed.
just for my understanding: inds is a cell array. what exactly does inds{:} give? looks like seperate doubles.
thanks again!

Connectez-vous pour commenter.

Plus de réponses (2)

per isakson
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.

Walter Roberson
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
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))];
Peter
Peter le 16 Mar 2012
num2mat doesn't seem to exist. can you maybe comment on what class idxexpr should be to make it work as a subscript expression? that would give some direction to my own attempts. it seems like a cell array doesn't work. ('ndim' should be 'ndims' btw.)
thanks again!

Connectez-vous pour commenter.

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!

Translated by