zoukankan      html  css  js  c++  java
  • AttributeError: 'str' object has no attribute 'copy'

    在使用Python Networkx 中的relabel_nodes函数时,出现:

    AttributeError: 'str' object has no attribute 'copy'

    找了半天也没发现错误出现在哪里,通过比较发现:

    如果在定义图的类型时候使用G=nx.MultiDiGraph()就会出现这个错误,改为G=nx.Graph()错误消失。

    目测是relabel_nodes函数不支持MultiDiGraph。

    附:

     1 def relabel_nodes(G, mapping, copy=True):
     2     """Relabel the nodes of the graph G.
     3 
     4     Parameters
     5     ----------
     6     G : graph
     7        A NetworkX graph
     8 
     9     mapping : dictionary
    10        A dictionary with the old labels as keys and new labels as values.
    11        A partial mapping is allowed.
    12 
    13     copy : bool (optional, default=True)
    14        If True return a copy, or if False relabel the nodes in place.
    15 
    16     Examples
    17     --------
    18     >>> G=nx.path_graph(3)  # nodes 0-1-2
    19     >>> mapping={0:'a',1:'b',2:'c'}
    20     >>> H=nx.relabel_nodes(G,mapping)
    21     >>> print(sorted(H.nodes()))
    22     ['a', 'b', 'c']
    23 
    24     >>> G=nx.path_graph(26) # nodes 0..25
    25     >>> mapping=dict(zip(G.nodes(),"abcdefghijklmnopqrstuvwxyz"))
    26     >>> H=nx.relabel_nodes(G,mapping) # nodes a..z
    27     >>> mapping=dict(zip(G.nodes(),range(1,27)))
    28     >>> G1=nx.relabel_nodes(G,mapping) # nodes 1..26
    29 
    30     Partial in-place mapping:
    31 
    32     >>> G=nx.path_graph(3)  # nodes 0-1-2
    33     >>> mapping={0:'a',1:'b'} # 0->'a' and 1->'b'
    34     >>> G=nx.relabel_nodes(G,mapping, copy=False)
    35 
    36     print(G.nodes())
    37     [2, 'b', 'a']
    38 
    39     Mapping as function:
    40 
    41     >>> G=nx.path_graph(3)
    42     >>> def mapping(x):
    43     ...    return x**2
    44     >>> H=nx.relabel_nodes(G,mapping)
    45     >>> print(H.nodes())
    46     [0, 1, 4]
    47 
    48     Notes
    49     -----
    50     Only the nodes specified in the mapping will be relabeled.
    51 
    52     The keyword setting copy=False modifies the graph in place.
    53     This is not always possible if the mapping is circular.
    54     In that case use copy=True.
    55 
    56     See Also
    57     --------
    58     convert_node_labels_to_integers
    59     """
    60     # you can pass a function f(old_label)->new_label
    61     # but we'll just make a dictionary here regardless
    62     if not hasattr(mapping,"__getitem__"):
    63         m = dict((n, mapping(n)) for n in G)
    64     else:
    65         m = mapping
    66     if copy:
    67         return _relabel_copy(G, m)
    68     else:
    69         return _relabel_inplace(G, m)
  • 相关阅读:
    Linux 配置jdk vim和 Linux 基本操作
    Java02_数据类型
    java01_简介_开发环境
    基于Vue + webpack + Vue-cli 实现分环境打包项目
    理解TCP/IP三次握手与四次挥手的正确姿势
    Vue 项目骨架屏注入与实践
    我的第一个Quartz代码
    hdu5882 Balanced Game
    hdu5883 The Best Path(欧拉路)
    Poj 1273 Drainage Ditches(最大流 Edmonds-Karp )
  • 原文地址:https://www.cnblogs.com/purple-blog/p/4593786.html
Copyright © 2011-2022 走看看