Python 3.x 网络X下的图置换与旋转

Python 3.x 网络X下的图置换与旋转,python-3.x,scipy,networkx,graph-theory,isomorphism,Python 3.x,Scipy,Networkx,Graph Theory,Isomorphism,我和Networkx一起工作来生成某种类型的图 现在我想排列节点,并以(80°、90°、120°的角度旋转图形 我如何在具有NetworkX的图上应用置换和旋转 编辑\u 1: 给定一个图的邻接矩阵,我希望以保持边和顶点链接的方式旋转该图。唯一改变的是节点的位置 我想做的是把我的图表旋转90度 输入: 图G的邻接矩阵 过程: 在G上应用90度旋转 输出: 旋转邻接矩阵 这意味着,图保留了它的拓扑结构,只保留了改变位置的邻接矩阵的索引 例如,旋转后索引0处的节点1将位于索引4处 我试过什么? 1)

我和Networkx一起工作来生成某种类型的图

现在我想排列节点,并以(80°、90°、120°的角度旋转图形

我如何在具有NetworkX的图上应用置换旋转

编辑\u 1:

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

我想做的是把我的图表旋转90度

输入:

图G的邻接矩阵

过程:

在G上应用90度旋转

输出:

旋转邻接矩阵

这意味着,图保留了它的拓扑结构,只保留了改变位置的邻接矩阵的索引

例如,旋转后索引0处的节点1将位于索引4处

我试过什么?
1) 我照顾过numpy.random.permutation(),但它似乎不接受旋转参数

2) 在networkX中,我没有找到任何允许进行旋转的函数

EDIT2 给定一个5*5的邻接矩阵(5个节点:

我想在索引之间交换。 假设节点1代替节点3,节点3代替节点4,节点4代替节点1

这只是节点的排列(保留它们的边)

我想在字典中保留原始索引和排列后的新索引之间的映射


第二,我想用90度角对这个邻接矩阵进行置换或旋转(就像在图像上进行旋转)。我不知道怎么做。

看看networkx命令

给定一个图
G
,如果我们想将节点
0
重新标记为
1
1
重新标记为
3
3
重新标记为
0
[因此,节点的一个排列,将
2
保留在适当的位置],我们创建dict
映射={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.]]

你能给出一个输入和所需输出的例子吗?@Joel,请看我的更新。希望我清楚这对我来说仍然不清楚。看起来你在谈论节点的(x,y)坐标,但是你似乎也在重新标记节点。你不需要重新标记节点来更改(x,y)坐标。你能给出一个具体的输入以及该输入的期望输出是什么吗?@Joel,请看我的更新示例非常感谢Joel。现在我需要一种自动进行映射的方法。你的示例是随机置换。现在我需要做一个显式置换(在给定意义下旋转90°或70°)。您仍然需要解释“旋转”在邻接矩阵中的含义,@ericlardon。您能告诉我70度旋转对我使用的路径网络G意味着什么吗?这是一个很好的答案,但不幸的是,在最新版本的NetworkX中不再起作用(我使用的是v2.3)!实际上它是有效的,变化是
nx。to\u numpy\u matrix
将节点按不同的顺序排列。我已更新以更清楚地说明这一点
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.]]