interesting matrix indexing question without for loops
2 views (last 30 days)
Show older comments
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!
0 Comments
Accepted Answer
Stephen23
on 3 Oct 2018
Edited: Stephen23
on 3 Oct 2018
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)
More Answers (1)
Bruno Luong
on 3 Oct 2018
Edited: Bruno Luong
on 3 Oct 2018
C = A(B+reshape(0:numel(B)-1,size(B))*size(A,1))
See Also
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!