Get certain matrix entries to a new matrix
1 次查看(过去 30 天)
显示 更早的评论
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
2020-8-26
can you please explain more
for example 2nd line how it became 2005 2005 and the last 2 lines also
采纳的回答
dpb
2020-8-26
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 个评论
dpb
2020-8-26
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.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!