필터 지우기
필터 지우기

array indexing with another array in multidimensional matrices

조회 수: 8 (최근 30일)
Thank you in advance for helping:
I have a multidimensional matrix (let's say 4D as example) and I want to index its values through another matrix which contains all possible combinations, as an example:
A=randi(10,5,4,3,2) %%is 4D matrix
and I want to index its "submatrices" through another vector, without performing for loops. In this specific case my indexing matrix would be:
idx=[1,1;2,1;3,1;1,2;2,2;3,2] %%is indexing matrix
through which I would like to obtain my resulting matrices:
A(:,:,1,1);
A(:,:,2,1);
A(:,:,3,1);
A(:,:,1,2);
A(:,:,2,2);
A(:,:,3,2);
by adding the last two indices with my indexing matrix:
A(:,:,B(1,:));
A(:,:,B(2,:));
A(:,:,B(3,:));
A(:,:,B(4,:));
A(:,:,B(5,:));
A(:,:,B(6,:));
but the two forms don't give the same results and I would like to code a form similar to the last one to obtain the first results, i.e. singe 2D matrices.
Thanks

채택된 답변

Cris LaPierre
Cris LaPierre 2020년 8월 2일
편집: Cris LaPierre 2020년 8월 2일
The issue here is that, when indexing, a vector of numbers acts on a single dimension. When indexing, a comma separates dimensoins, much like in a function you use a comma to separate the different inputs. You are expecting MATLAB to 'know' you want the first column to apply to one dimiension, and the second column to another. Instead, you must explicity state the input for each dimension, separating each with a comma:
A(:,:,B(:,1),B(:,2))
  댓글 수: 8
gabriele fadanelli
gabriele fadanelli 2020년 8월 2일
I am sorry I didn't want to get people confused in trying to address a problem I couldn't explain without an example. Your help was very appreciated, thanks.
gabriele fadanelli
gabriele fadanelli 2020년 8월 2일
I actually need to extract specific 2D matrices, but through reshaping I can manage, thanks.

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

추가 답변 (1개)

Bruno Luong
Bruno Luong 2020년 8월 2일
편집: Bruno Luong 2020년 8월 2일
A=randi(10,5,4,3,2)
idx=[1,1;2,1;3,1;1,2;2,2;3,2]
Then
sz=size(A);
Aidx = A(:,:,sub2ind(sz(3:4),idx(:,1),idx(:,2)))
  댓글 수: 6
Bruno Luong
Bruno Luong 2020년 8월 2일
I have impression you do something overly complicated.
You replace the indexing of last p-dimension by all combinations possible of the p last indexes.
This is insanely redundant, you already have your data with all the combination in the original form. Simple use permute/reshape will put them in the form you want no need those combination/indexing.
gabriele fadanelli
gabriele fadanelli 2020년 8월 2일
Yes, at first I couldn't manage it, but now yes! Anyway I aso need the 2D matrices and Mr LaPierre solution perfectly fits

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

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by