# Get certain matrix entries to a new matrix

조회 수: 2(최근 30일)
Rene 26 Aug 2020
댓글: dpb 27 Aug 2020
Hello
I need to create a loop that reads certain data from a matrix and put it into a new matrix.
The matrix is for example:
2003 2004 0 0 0
2004 2005 0 0 0
2005 4005 0 0 0
3001 3002 5002 6002 0
Now I want to automatically create a new matrix that gives me all the "connections" like so:
2003 2004
2004 2005
2005 4005
3001 3002
3001 5002
3001 6002
Zeros should be ignored in the new matrix. The first column is always filled with a number.
Any idea how to do this? I'm thinking of a while loop but I can't figure out how.

#### 댓글 수: 2

tareq ALTALMAS 26 Aug 2020
for example 2nd line how it became 2005 2005 and the last 2 lines also
Rene 26 Aug 2020
There was one mistake in the second matrix (as you saw with the 2005 2005).
The numbers are measurement points on a model. The first table/matrix gives the information which point connects to others.
Later all of the points will get x,y and z values to then plot a vector from point to point to get a 3d line model.
Therefore I need to extract the connections.
2003 connects to 2004 and no other
3001 connects to 3002, 5002 and 6002.
Is it any clearer now?

댓글을 달려면 로그인하십시오.

### 채택된 답변

dpb 26 Aug 2020
nAdd=sum(A~=0,2)-2; % number of connections beyond the one for each first node
V=zeros(size(A,1)+sum(nAdd),2); % preallocate for final array
% the engine...
j=0;
for i=1:size(A,1)
j=j+1;
V(j,:)=A(i,1:2);
j=j+1;
V(j,:)=[A(i,1),A(i,2+k)];
end
end
above results in
>> V
V =
2003 2004
2004 2005
2005 4005
3001 3002
3001 5002
3001 6002
>>

#### 댓글 수: 3

Rene 26 Aug 2020
Thank you very much. This pretty much worked out.
The only little problem is, that in my full matrix are some points that are a "dead end". So they have no connection at all. They stil appear in the new matrix with a zero.
dpb 26 Aug 2020
You mean there's one or more nodes with a zero in column 2? If that's so, just remove them first...
A(A(:,2)==0)=[];
before the previous code.
Or after gets to same end but first is more efficient in reducing the size quicker.
dpb 27 Aug 2020
Or, save only those w/ a node connection first...
A=A(A(:,2)~=0);

댓글을 달려면 로그인하십시오.

### Community Treasure Hunt

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

Start Hunting!

Translated by