How can I create a new matrix with x and y coordinates using a for loop?

3 views (last 30 days)
Lets say I have a matrix A like this:
A=
0 0 1 0 0 0
0 0 0 0 1 0
0 1 0 0 0 1
I want to create a for loop in which this loop creates a new matrix like this
B=
1 3 1
2 5 2
3 2 3
4 6 3
The first column will be the ones showed in the matrix A(point 1,2,3,4) and the second and third columns will be the x and y coordinates of those points(point 1 is at 3 in the x direction and 1 in the y direction). Is it possible?

Accepted Answer

Paul
Paul on 18 Jan 2014
Edited: Paul on 18 Jan 2014
[y,x]=find(A==1);
num=length(x);
B=[(1:num)',x,y];
If you want to sort the points the way you described do for example this:
[y,x]=find(A==1);
num=length(x);
xy=sortrows([x,y],2)
B=[(1:num)',xy]
  3 Comments
Paul
Paul on 18 Jan 2014
Edited: Paul on 18 Jan 2014
Yes but why, this is easier. You can do it like this:
p=1;
[row,col] = size(A);
for i = 1:row
for j=1:col
if(A(i,j)==1)
B(p,:)=[p,j,i];
p=p+1;
end
end
end

Sign in to comment.

More Answers (0)

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!