interesting matrix indexing question without for loops

1 回表示 (過去 30 日間)
Chris Hooper
Chris Hooper 2018 年 10 月 2 日
コメント済み: Chris Hooper 2018 年 10 月 3 日
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!

採用された回答

Stephen23
Stephen23 2018 年 10 月 3 日
編集済み: Stephen23 2018 年 10 月 3 日
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 件のコメント
Chris Hooper
Chris Hooper 2018 年 10 月 3 日
Stephen you're awesome thanks! I knew there was something like that... it's been a while!

サインインしてコメントする。

その他の回答 (1 件)

Bruno Luong
Bruno Luong 2018 年 10 月 3 日
編集済み: Bruno Luong 2018 年 10 月 3 日
C = A(B+reshape(0:numel(B)-1,size(B))*size(A,1))
  1 件のコメント
Chris Hooper
Chris Hooper 2018 年 10 月 3 日
Awesome I'll check this one, cannot even wrap my head around it!!

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeMatrix Indexing についてさらに検索

タグ

製品

Community Treasure Hunt

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

Start Hunting!

Translated by