NetworkX入门教程

NetworkX入门教程NetworkX 入门教程 NetworkX Python 处理图数据的包

诸神缄默不语-个人CSDN博文目录

VX号“PolarisRisingWar”可直接搜索添加作者好友讨论。

1. Graph Types

Graph Types文档

允许以可哈希的object作为节点,任何Python object作为边属性。

2. 图数据的创建、属性与常用方法

Graph文档

  1. 创建一个空的图
    1. 无向图:G = nx.Graph()
    2. 有向图:DG = nx.DiGraph()
  2. 将有向图转换为无向图:G = nx.Graph(DG)
  3. 图是否有向:G.is_directed() 返回布尔值
  4. 添加节点
    1. 直接添加一个节点(任何object都可以作为节点,包括另一个图)G.add_node(1)G.add_node(DG)
    2. 从任何容器加点:a list, dict, set or even the lines from a file or the nodes from another graph
      G.add_nodes_from()nx.path_graph() path_graph()文档(相当于生成一条线)

添加节点 示例代码:

G.add_nodes_from([2, 3]) G.add_nodes_from(range(100, 110)) H = nx.path_graph(10) G.add_nodes_from(H) 
G.add_node('spam') # adds node "spam" G.add_nodes_from('spam') # adds 4 nodes: 's', 'p', 'a', 'm' 
  1. 添加边
    1. 添加一条边 G.add_edge(u, v)
    2. 添加一个边的列表 G.add_edges_from([(1, 2), (1, 3)])
    3. 添加一个边的collection G.add_edges_from(H.edges)
    4. 如果添加的边的点不存在于图中,会自动添上相应节点而不报错
  2. 属性attribute
    1. 图的节点/边/图都可以在关联的attribute字典中以键值对key/value形式存储attribute(key一定要是可哈希的)
    2. 默认情况下属性字典是空的
    3. 可以通过 add_edge()add_node() 方法或直接操作分别名为graph edges nodes的属性字典来进行操作
G = nx.Graph(day="Friday") G.graph #输出:{'day': 'Friday'} 

为图赋属性(也是修改属性的方法)

G = nx.Graph() G.graph["Name"] = "Bar" print(G.graph) #输出:{'Name': 'Bar'} 

G.add_node(1, time="5pm") G.add_nodes_from([3], time="2pm") G.nodes[1] #输出:{'time': '5pm'} G.nodes[1]["room"] = 714 # node must exist already to use G.nodes del G.nodes[1]["room"] # remove attribute list(G.nodes(data=True)) #输出:[(1, {'time': '5pm'}), (3, {'time': '2pm'})] list(G) #G也可以作为G节点的迭代器 

添加多个带属性节点

# Add multiple nodes with attributes G.add_nodes_from([ (1, { 
    "feature": 1, "label": 1}), (2, { 
    "feature": 2, "label": 2}) ]) 

G.add_edge(1, 2, weight=4.7) G.add_edges_from([(3, 4), (4, 5)], color="red") G.add_edges_from([(1, 2, { 
     "color": "blue"}), (2, 3, { 
     "weight": 8})]) G[1][2]["weight"] = 4.7 G.edges[1, 2]["weight"] = 4 G.edges[(1, 2)]["weight"] = 4 list(G.edges(data=True)) #跟上面的G.nodes()类似 

注意:G.edges属性是只读的,但是可以更改类似G.edges[1, 2]这种object里的属性,举例:G.edges[1, 2]['weight'] = 4
(对multigraph:MG.edges[u, v, key][name] = value





添加含weight属性的边 add_weighted_edges_from()函数文档

G.add_weighted_edges_from([(0, 1, 3.0), (1, 2, 7.5)]) 

注意:如果在Graph/DiGraph中添加两次相同的边会仅更新weight;如果在MultiGraph/MultiDiGraph中则会储存多此边

  1. 兼容Python语法的捷径

示例代码:

1 in G # check if node in graph [n for n in G if n < 3] # iterate through nodes len(G) # number of nodes in graph 
  1. 节点数量 G.number_of_nodes()
    边数量 G.number_of_edges()

  2. 可视化 nx.draw(G, with_labels = True)在这里插入图片描述
  3. 节点特征
    1. 度数:G.degree[node_id]G.out_degree(node_id)G.in_degree(node_id)
      可选参数:weight

    2. 邻居:
      1. 无向图:G.neighbors(node_id) 返回迭代器
      2. 有向图:
        1. G.successors(node_id)(node_id指向的节点)
        2. G.predecessors(node_id)(指向node_id的节点)
      3. 另一种访问邻居的方式是通过G.adj(adjacency list,详情见后文)
        G[node_id]
        G.adj[node_id]




    3. PageRank:nx.pagerank(G) 返回PageRank向量 pagerank()文档
  4. 删除数据
    1. 删除节点:G.remove_node(n)
    2. 删除所有节点和边:G.clear()
  5. 图表示
    1. adjacency list
      1. G.adj
        返回值示例:AdjacencyView({1: {2: {'weight': 0.125}, 3: {'weight': 0.75}}, 2: {1: {'weight': 0.125}, 4: {'weight': 1.2}}, 3: {1: {'weight': 0.75}, 4: {'weight': 0.375}}, 4: {2: {'weight': 1.2}, 3: {'weight': 0.375}}})

      2. G.adjacency()
        返回一个迭代器,每个元素示例格式:(1, {2: {'weight': 0.125}, 3: {'weight': 0.75}})

      3. 用类似 G[1] 的方法也可以访问(相当于 G.adj[1]),返回值示例:AtlasView({2: {'weight': 0.125}, 3: {'weight': 0.75}})

3. 除文中已列出的NetworkX官方文档外,其他使用到的参考资料

  1. cs224w课程的colab0
    1. 原始文件下载地址
    2. 我上传到GitHub的文件网址,已添加过部分私人注释
  2. cs224w课程的colab0的参考文件
    1. 原始文件下载地址 有过时语法
    2. 我把这个文件代码改了后跑通了,放到了Google Drive上公开。可以上的如需可资借鉴:“NetworkX.ipynb”的副本 但是没什么新东西,所以下不了也无所谓,我就不放在GitHub之类更容易登入的地方了。如需找我。




版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/218815.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午11:25
下一篇 2026年3月17日 下午11:25


相关推荐

  • hive数据类型转换cast_c语言数据类型的转换

    hive数据类型转换cast_c语言数据类型的转换在《Hive内置数据类型》文章中,我们提到了Hive内置数据类型由基本数据类型和复杂数据类型组成。今天的话题是Hive数据类型之间的转换。同Java语言一样,Hive也包括隐式转换(implicitconversions)和显式转换(explicitlyconversions)。  Hive在需要的时候将会对numeric类型的数据进行隐式转换。比如我们对两个不同数据类型的数字进行比较

    2026年2月7日
    6
  • pycharm 2021年最新激活码 有效【在线破解激活】「建议收藏」

    pycharm 2021年最新激活码 有效【在线破解激活】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
    71
  • 为什么说卸载OpenClaw,是普通开发者该做的清醒选择?

    为什么说卸载OpenClaw,是普通开发者该做的清醒选择?

    2026年3月13日
    1
  • 2021年PyCharm激活码破解方法

    2021年PyCharm激活码破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    48
  • Win10怎么添加开机启动项?Win10添加开机自动运行软件三种方法

    Win10怎么添加开机启动项?Win10添加开机自动运行软件三种方法Win10 管理开机启动项的方法相信大家已经非常熟悉 msconfig 命令各系统都通用 那么很多用户发觉 Win10 和 Win7XP 等系统不同 没有启动文件夹 那么我们怎么添加开机启动项呢 如晨软件或程序没有开机启动设置的话 是的 在 Win10 中添加开机启动项虽然麻烦了些 但是还是可以设置的 下面小编就分享几种方法 方法一 开机启动文件夹 1 我们打开文件夹 C Users 用户 Administ

    2026年3月26日
    2
  • 测试用例设计——边界值分析法

    测试用例设计——边界值分析法在前面的测试用例设计 等价类划分法中 我们使用等价类划分法给两位数加法器设计了测试用例 但在测试过程中我们发现了一个问题 为什么我们用等价类法设计的测试用例没有发现这个问题呢 查看一下代码 发现程序员粗心 边界条件设置错误了 无数的测试实践表明 大量的故障往往发生在输入定义域或输出值域的边界上 而不是在其内部 因此 针对各种边界情况设计测试用例 通常可能会发现更多的 bug 边界值分析法

    2026年3月16日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号