Search code examples
arraysmatlabmatrix-multiplication

Using one array values to access another array elements Matlab


I am doing some 3D and 4D matrix manipulation in Matlab. I have created a 2D array which row values contain the index values of interest in a 3D matrix.

Assuming array A of size (Nx2)

A=[2 3 1;5 6 2;7 9 3;3 3 4;1 5 5]

2   3   1
5   6   2
7   9   3
3   3   4
1   5   5

Then, I want to use these elements to manipulate matrix B of size (NxMxL)

B=rand(9,9,5);

So I want to set B(2,3,1)=0 which corresponds to A(1,:).

If I naively go B(A(1,:))=0 this doesn't return me the desired output. What I understand is that Matlab translate this into B=B(:) which reshape the matrix into a 1xNML and then returns me the elements 2, 3 and 1 of the reshaped matrix.

How can I avoid this and make it understand my argument B(A(1,:))=B(2,3,1)?


Solution

  • use sub2ind , for example zeroing all the elements in B using of the rows in A as indices:

    B(sub2ind(size(B),A(:,1),A(:,2),A(:,3)))=0;