Hello, I'm not sure how to best describe my intention, so I'll use an example:
Say I have a 3D-array:
A(:,:,1) = [1 2 ; 3 4]
A(:,:,2) = [5 6 ; 7 8]
and a 2x2 matrix:
B = [1 2 ; 1 2]
I want MATLAB to give me a 2x2 matrix comprised of elements of A, where the 3rd-dimension position of the element that is picked is indexed by the matrix B. So, in this example:
C = A(:,:,B)
should return [1 6 ; 3 8], because it picks the elements of A(:,:,1) in the first column, and the elements of A(:,:,2) in the second column of the 2x2 matrix.
I could see this potentially being achieved with linear indexing, but is there a cleaner way?
Thanks!

 Réponse acceptée

James Tursa
James Tursa le 30 Mar 2016
Modifié(e) : James Tursa le 30 Mar 2016
Try this using linear indexing as you suggested:
z = size(A);
mn = z(1) * z(2);
x = (1:mn)' + (B(:)-1)*mn;
C = reshape(A(x),z(1),z(2));

Plus de réponses (0)

Catégories

En savoir plus sur Matrices and Arrays dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by