使用 NetworkX 进行图形排列和旋转
Graph permutation and rotation witn NetworkX
我与 Networkx 合作生成一些 class 图表。
现在我想排列节点并将图形旋转(80°,90°,120°度)
如何使用 NetworkX 在图上应用 排列 和 旋转?
Edit_1:
给定一个图的邻接矩阵,我想以保留边和顶点的方式旋转图 link。唯一改变的是节点的位置。
我想做的是将我的图形旋转 90 度。
输入:
图G的邻接矩阵
进程:
对 G 应用 90 度旋转
输出:
旋转邻接矩阵
这意味着,图保留了它的拓扑结构和改变位置的邻接矩阵的索引。
例如,旋转后索引 0 处的节点 1 将位于索引 4 处。
我试过什么?
1)我关注了 numpy.random.permutation()
但它似乎不接受旋转参数。
2) 在networkX中我没有找到任何允许旋转的函数。
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]
]
我想在索引之间进行置换。
假设节点 1 代替节点 3 ,节点 3 代替节点 4 ,节点 4 代替节点 1.
这只是节点的排列(保留它们的边)。
我想在字典中保留原始索引和排列后新索引之间的映射。
其次,我想对这个邻接矩阵进行90°角的排列或旋转。 (这就像在图像上应用旋转)。我不确定该怎么做。
看看 networkx 命令 relabel_nodes
。
给定一个图 G
,如果我们想将节点 0
重新标记为 1
、1
为 3
和 3
作为 0
[所以节点的排列,留下 2
],我们创建字典 mapping = {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 合作生成一些 class 图表。
现在我想排列节点并将图形旋转(80°,90°,120°度)
如何使用 NetworkX 在图上应用 排列 和 旋转?
Edit_1:
给定一个图的邻接矩阵,我想以保留边和顶点的方式旋转图 link。唯一改变的是节点的位置。
我想做的是将我的图形旋转 90 度。
输入:
图G的邻接矩阵
进程:
对 G 应用 90 度旋转
输出:
旋转邻接矩阵
这意味着,图保留了它的拓扑结构和改变位置的邻接矩阵的索引。
例如,旋转后索引 0 处的节点 1 将位于索引 4 处。
我试过什么?
1)我关注了 numpy.random.permutation()
但它似乎不接受旋转参数。
2) 在networkX中我没有找到任何允许旋转的函数。
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]
]
我想在索引之间进行置换。 假设节点 1 代替节点 3 ,节点 3 代替节点 4 ,节点 4 代替节点 1.
这只是节点的排列(保留它们的边)。
我想在字典中保留原始索引和排列后新索引之间的映射。
其次,我想对这个邻接矩阵进行90°角的排列或旋转。 (这就像在图像上应用旋转)。我不确定该怎么做。
看看 networkx 命令 relabel_nodes
。
给定一个图 G
,如果我们想将节点 0
重新标记为 1
、1
为 3
和 3
作为 0
[所以节点的排列,留下 2
],我们创建字典 mapping = {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.]]