how to extract elements along specified dimension of array

88 views (last 30 days)
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!!

Accepted Answer

Jonathan Sullivan
Jonathan Sullivan on 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 Comment
Peter
Peter on 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!

Sign in to comment.

More Answers (2)

per isakson
per isakson on 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 on 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 Comments
Peter
Peter on 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!

Sign in to comment.

Categories

Find more on Matrices and Arrays in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!