用NetworkX实现图的置换和旋转 [英] Graph permutation and rotation witn NetworkX
本文介绍了用NetworkX实现图的置换和旋转的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
l与Networkx合作生成某种类型的图形。
现在l要置换节点并将图形旋转(80°、90°、120°)
l如何在使用NetworkX的图表上应用置换和旋转?
编辑_1:
给定一个图的邻接矩阵,l希望以保持边和顶点链接的方式旋转该图。唯一更改的是节点的位置。
l要做的是将我的图表旋转90度。
输入:
图G的邻接矩阵
进程:
将G旋转90度
输出:
旋转邻接矩阵
这意味着,图保持了它的拓扑,只保留了位置变化的邻接矩阵的索引。
例如,循环后索引0处的节点1将位于索引4处。
l尝试过什么?
1)l已处理numpy.random.permutation()
,但它似乎不接受旋转参数。
2)在网络X中,%l找不到任何允许轮换的函数。
EDIT2 给定一个5*5的邻接矩阵(5个节点:
adj=[[0,1,0,0,1],
[1,0,1,1,0],
[0,0,0,1,1],
[0,0,1,0,1],
[1,1,1,1,0]
]
l希望在索引之间进行置换。 假设节点1代替节点3,节点3代替节点4,节点4代替节点1。
它只是节点的排列(保留它们的边)。
l希望在词典中保留原始索引和排列后的新索引之间的映射。
其次,l希望应用此邻接矩阵的排列或旋转,角度为90°。(这类似于在图像上应用旋转)。我不知道怎么做才行。
推荐答案
查看networkx命令relabel_nodes
。
G
,如果希望将0
节点重新标记为1
、1
为3
和3
为0
[因此是节点的排列,保留2
不变],则创建dictmapping = {0:1, 1:3, 3:0}
。那么我们就这么做
H = nx.relabel_nodes(G, mapping)
和H
现在是置换图。
import networkx as nx
G = nx.path_graph(4) #0-1-2-3
mapping = {0:1, 1:3, 3:0}
H = nx.relabel_nodes(G, mapping) #1-3-2-0
#check G's adjacency matrix
print(nx.to_numpy_matrix(G,nodelist=[0,1,2,3]))
> [[ 0. 1. 0. 0.]
[ 1. 0. 1. 0.]
[ 0. 1. 0. 1.]
[ 0. 0. 1. 0.]]
#check H's adjacency matrix
print(nx.to_numpy_matrix(H,nodelist=[0,1,2,3]))
> [[ 0. 0. 1. 0.]
[ 0. 0. 0. 1.]
[ 1. 0. 0. 1.]
[ 0. 1. 1. 0.]]
这篇关于用NetworkX实现图的置换和旋转的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文