how to extract elements along specified dimension of array

조회 수: 37 (최근 30일)
Peter
Peter 2012년 3월 15일
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!!

채택된 답변

Jonathan Sullivan
Jonathan Sullivan 2012년 3월 16일
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
Peter
Peter 2012년 3월 16일
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!

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

추가 답변 (2개)

per isakson
per isakson 2012년 3월 15일
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 2012년 3월 15일
Something like this,
DIM = 2; %changed at runtime
idxexpr = { repmat({1}, 1, DIM - 1), {':'}, repmat({1}, 1, ndim(A)-DIM) };
A(idxexpr{:})
  댓글 수: 3
Walter Roberson
Walter Roberson 2012년 3월 15일
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 2012년 3월 16일
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!

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

카테고리

Help CenterFile Exchange에서 Data Type Conversion에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by