I have matrices of varying dimensionality I need to index.
So just writing A(i1,...,in) is not an option because n can vary in my application.
What is known to work for getting a single element out of A is using a cell array:
IndArray={i1,...,in}
Elem=A(IndArray{:})
However I'd like to do something like SubMatrix= A(i1,i2,...,im,:,:,...,:), where m<n. Is there a way to do that?
The following does not work:
IndArray={i1,...,im}
SubMatrix=A(IndArray{:})
Thanks in advance for any hints.

 채택된 답변

Rik
Rik 2021년 8월 2일

0 개 추천

I would suggest something like this:
IndArray={i1,...,im}
for dim=(numel(IndArray)+1):ndims(A)
IndArray{dim}=1:size(A,dim);
end
SubMatrix=A(IndArray{:})

추가 답변 (2개)

Stephen23
Stephen23 2021년 8월 2일
편집: Stephen23 2021년 8월 2일

1 개 추천

No need for a loop, here is the simple and efficient MATLAB approach:
IndArray = {i1,..,im};
IndArray(1+end:ndims(A)) = {':'};
SubMatrix = A(IndArray{:})
How it works: MATLAB always allows a scalar element on the RHS to be allocated to any number of elements on the LHS. This applies to any array class: numeric, cell (as above), char, string, struct, etc.

댓글 수: 1

Lionel Pöffel
Lionel Pöffel 2021년 8월 2일
Hello Stephen,
thanks for your answer. That is, of course, an additional improvement.

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

Lionel Pöffel
Lionel Pöffel 2021년 8월 2일

0 개 추천

Hi Rik, that seems to work, thanks.
DGM posted an answer that surprisingly also seems to work but unfortunately deleted it (thanks to him/her as well).
For completeness I will note it here:
IndArray={i1,...,im}
for dim=(numel(IndArray)+1):ndims(A)
IndArray(dim)={':'};
end
SubMatrix=A(IndArray{:})

댓글 수: 1

DGM
DGM 2021년 8월 2일
Sorry about that. I tried reading your other posts to try to figure out what exactly you were trying to do and had the feeling that I had misunderstood the intent.

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

카테고리

도움말 센터File Exchange에서 Matrix Indexing에 대해 자세히 알아보기

제품

질문:

2021년 8월 2일

댓글:

2021년 8월 2일

Community Treasure Hunt

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

Start Hunting!

Translated by