2

l 与 Networkx 合作生成某种类型的图。

现在我想置换节点并用(80°,90°,120°度)旋转图形

如何使用 NetworkX 在图上 应用排列旋转?

编辑_1:

给定一个图的邻接矩阵,我想以保留边和顶点链接的方式旋转图。唯一改变的是节点的位置。

我想做的是将我的图表旋转 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° 的角度应用这个邻接矩阵的排列或旋转。(这就像在图像上应用旋转)。我不确定如何做到这一点。

4

1 回答 1

2

看一下 networkx 命令relabel_nodes

Given a graph G, if we want to relabel node 0 as 1, 1 as 3, and 3 as 0 [so a permutation of the nodes, leaving 2 in place], we create the dict mapping = {0:1, 1:3, 3:0}. Then we do

H = nx.relabel_nodes(G, mapping)

And H is now the permuted graph.

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.]]
于 2018-05-08T04:38:52.347 回答