我有一个矩阵A
的尺寸的Matlab的mx2
包含每行中的两个节点的示出了网络中的直接链接的标签,例如:
如果网络具有4
节点的矩阵A
可以是A=[1 2; 1 3; 2 1; 2 4; 3 2; 4 1; 4 2]
A=[1 2; 1 3; 2 1; 2 4; 3 2; 4 1; 4 2]
A=[1 2; 1 3; 2 1; 2 4; 3 2; 4 1; 4 2]
其中第一行是指有从链路1
到2
中,第二行意味着有从链路1
至3
等
你可以建议我一个快速的方法来区分来源于网络?
如果你想要的链接,是方向性的,并具有生物信息学工具箱,你可以创建一个biograph
对象。 这也允许与标识字符串标记的节点,如果你愿意的话,请参阅帮助文件。 如果不是他们会被称为“节点1”,“节点2”,等你需要你的链接列表转换为邻接矩阵- @RTL给accumarray
版本,你也可以使用sub2ind:
N = 4;
adj = zeros(N);
adj(sub2ind([N,N], A(:,1),A(:,2))) = 1;
bg = biograph(adj); % make biograph object
dolayout(bg); % automatically calculate positions for nodes
view(bg); % what it says on the tin
n = max(A(:)); %// number of nodes
theta = linspace(0,2*pi,n+1); %// the nodes will be on a circle
theta = theta(1:end-1);
x = cos(theta); %// x coordinates of nodes
y = sin(theta); %// y coordinates of nodes
plot(x, y, 'ro') %// plot nodes
hold on
plot(x(A).', y(A).', 'b-') %// plot edges
axis image
axis(1.2*[-1 1 -1 1])
set(gca,'xtick',[],'ytick',[])
使用内置的替代解决方案gplot
功能
adj=accumarray(A,1)
n=size(adj,1); % number of nodes
coord=[cos((1:n).'*(2*pi/n)),sin((1:n).'*(2*pi/n))] % points on a circle for nodes
gplot(adj,coord)
对于大型网络邻接矩阵可以作为稀疏来产生与accumarray(A,1,[],[],0,true)
MatLab的> R2015b现在有图和网络算法 。
A
是你会打电话边列表。
plot(digraph(A(:,1),A(:,2))
将借鉴网络。
您可能也有兴趣Matgraph,matlab工具箱的图形操作:
http://www.mathworks.com/matlabcentral/fileexchange/19218-matgraph