interesting matrix indexing question without for loops

1 Ansicht (letzte 30 Tage)
Chris Hooper
Chris Hooper am 2 Okt. 2018
Kommentiert: Chris Hooper am 3 Okt. 2018
size(matrixA)=[b,n,m]
size(matrixB)=[n,m]
how can I create
matrixC(i,j)=matrixA(matrixB(i,j),i,j)
without using for-loops? What is this kind of indexing called? Thanks!

Akzeptierte Antwort

Stephen23
Stephen23 am 3 Okt. 2018
Bearbeitet: Stephen23 am 3 Okt. 2018
Use sub2ind to get the linear indices:
A = reshape(1:6*3*2,6,3,2);
B = [6,1;4,3,;5,2];
% Solution with loops:
for ii = 1:size(B,1)
for jj = 1:size(B,2)
C(ii,jj) = A(B(ii,jj),ii,jj);
end
end
% Solution with SUB2IND:
S = size(B);
[I,J] = ndgrid(1:S(1),1:S(2));
X = sub2ind(size(A),B,I,J);
D = A(X)
% Compare:
isequal(C,D)
  1 Kommentar
Chris Hooper
Chris Hooper am 3 Okt. 2018
Stephen you're awesome thanks! I knew there was something like that... it's been a while!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Bruno Luong
Bruno Luong am 3 Okt. 2018
Bearbeitet: Bruno Luong am 3 Okt. 2018
C = A(B+reshape(0:numel(B)-1,size(B))*size(A,1))

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Tags

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by