0
votes

I need help solving an indexing problem. The assigned problem states: Two matrices (x and y) give the coordinates to form matrix B from matrix A. Produce the matrix B which contains the values of A at the given coordinates in x and y. For instance:

x = [1 1 1; 2 2 1]
y = [1 2 1; 3 2 4]
%This would read as (1,1),(1,2),(1,1),(2,3),(2,2),(1,4)
% Given matrix: 
A = [6 7 8 9; 10 11 12 13];
%This would give us this answer for B (using the coordinate scheme above): 
B=[6 7 6; 12 11 9];

I'm guessing I need to use the find function in conjunction with a sub2ind function, but I'm not 100% sure how to translate that into working code. The only thing I can think of would be to do something like this:

B=((x(1),(y(1)), (x(2),y(2)).......

But that would only work for the defined matrix above, not a randomly generated matrix. I tried looking for a similar problem on the site, but I couldn't find one. Your help would be really appreciated!

1
Try using a loop. Sometimes the simplest approach is the best.Andrey Rubshtein
You're right, sub2ind would be helpful here, as well reshape if you like. You don't need a loop -this can be done on one line. Read about linear indexing here to see if you can figure out what to do wit the output from ind2sub.horchler
possible duplicate of MATLAB sub2ind using vectorsbla

1 Answers

1
votes

You can't do it for randomly generated matrices, because you have to ensure that matrix A has lines and columns as required from the values of x and y.

In this case, you can write:

for i=1:length(x(:))
   B(i)=A(x(i),y(i));
end
B=reshape(B,size(x));