用NetworkX实现图的置换和旋转 [英] Graph permutation and rotation witn NetworkX

查看:16
本文介绍了用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节点重新标记为11330[因此是节点的排列,保留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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆