how to extract elements along specified dimension of array
9 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
採用された回答
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{:})
その他の回答 (2 件)
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.
0 件のコメント
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
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))];
参考
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!