Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Replace elements in a matrix according to the coordinates in matlab

Tags:

matlab

I am curious about what is the best way to do this: assume I have a 10x10 zero matrix and I want to replace the zeros with ones with the known coordinates, in the beginning I am thing about write a for loop to replace the elements one by one by reading out the x and y. Is there any other easier way to do it?

Example:

mat=zeros(10);
x=[1,3,5,7,9]'; 
y=[2,4,6,8,10]';
newmat= [0 0 0 0 0 0 0 0 0 0
         1 0 0 0 0 0 0 0 0 0 
         0 0 0 0 0 0 0 0 0 0
         0 0 1 0 0 0 0 0 0 0
         0 0 0 0 0 0 0 0 0 0
         0 0 0 0 1 0 0 0 0 0
         0 0 0 0 0 0 0 0 0 0 
         0 0 0 0 0 0 1 0 0 0
         0 0 0 0 0 0 0 0 0 0
         0 0 0 0 0 0 0 0 1 0]  
like image 907
tytamu Avatar asked May 08 '11 02:05

tytamu


1 Answers

For this kind of manipulations use sub2ind, like

> mat=zeros(10); x=[1,3,5,7,9]'; y=[2,4,6,8,10]';
> mat(sub2ind([10 10], y, x))= 1
mat =
   0   0   0   0   0   0   0   0   0   0
   1   0   0   0   0   0   0   0   0   0
   0   0   0   0   0   0   0   0   0   0
   0   0   1   0   0   0   0   0   0   0
   0   0   0   0   0   0   0   0   0   0
   0   0   0   0   1   0   0   0   0   0
   0   0   0   0   0   0   0   0   0   0
   0   0   0   0   0   0   1   0   0   0
   0   0   0   0   0   0   0   0   0   0
   0   0   0   0   0   0   0   0   1   0

Update: To contrast this with innocent looking assigmnet mat(y, x)= 1.

> mat= zeros(10);
> mat(y, x)= 1
mat =
   0   0   0   0   0   0   0   0   0   0
   1   0   1   0   1   0   1   0   1   0
   0   0   0   0   0   0   0   0   0   0
   1   0   1   0   1   0   1   0   1   0
   0   0   0   0   0   0   0   0   0   0
   1   0   1   0   1   0   1   0   1   0
   0   0   0   0   0   0   0   0   0   0
   1   0   1   0   1   0   1   0   1   0
   0   0   0   0   0   0   0   0   0   0
   1   0   1   0   1   0   1   0   1   0
like image 172
eat Avatar answered Nov 15 '22 05:11

eat