Get certain matrix entries to a new matrix

1 Ansicht (letzte 30 Tage)
Rene
Rene am 26 Aug. 2020
Kommentiert: dpb am 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 Kommentare
tareq ALTALMAS
tareq ALTALMAS am 26 Aug. 2020
can you please explain more
for example 2nd line how it became 2005 2005 and the last 2 lines also
Rene
Rene am 26 Aug. 2020
Bearbeitet: Rene am 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?

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

dpb
dpb am 26 Aug. 2020
Sometimes, just "dead ahead" is as good as any...
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);
for k=1:nAdd(i)
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 Kommentare
dpb
dpb am 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
dpb am 27 Aug. 2020
Or, save only those w/ a node connection first...
A=A(A(:,2)~=0);

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by