首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从现有的不可变subgraph_view创建可变有向图

从现有的不可变subgraph_view创建可变有向图
EN

Stack Overflow用户
提问于 2022-11-07 14:05:31
回答 1查看 22关注 0票数 0

我做以下几件事。但是,当我试图修改new_graph中的节点时,就会得到一个TypeError: 'AtlasView' object does not support item assignment

代码语言:javascript
复制
    def get_my_nodes(source=None, distance=0):
        pre = [n for n in nx.dfs_preorder_nodes(G, source=source, depth_limit=distance)]
        post = [n for n in nx.dfs_preorder_nodes(G.reverse(), source=source, depth_limit=distance)]
        return set(pre + post)

    my_nodes = get_my_nodes(n, distance=dist)

    def filter_node(n):
        if n in my_nodes:
            return True
        return False

    subgraph_view = nx.subgraph_view(G, filter_node=filter_node)
    
    new_graph = nx.DiGraph(subgraph_view.copy())
    new_graph['my_node']['weight'] = 25  # <- this raises a TypeError: 'AtlasView' object does not support item assignment
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-07 14:37:27

您正在访问AtlasView,它仅在内部级别上读取(请参阅医生..。)。

最简单的解决方案是使用nx.set_node_attributes

代码语言:javascript
复制
def get_my_nodes(source=None, distance=0):
    pre = [n for n in nx.dfs_preorder_nodes(G, source=source, depth_limit=distance)]
    post = [n for n in nx.dfs_preorder_nodes(G.reverse(), source=source, depth_limit=distance)]
    return set(pre + post)

my_nodes = get_my_nodes(n, distance=dist)

def filter_node(n):
    if n in my_nodes:
        return True
    return False

subgraph_view = nx.subgraph_view(G, filter_node=filter_node)

new_graph = nx.DiGraph(subgraph_view.copy())

#new_graph['my_node'] is an AtlasView object (read only)

nx.set_node_attributes(new_graph, {'my_node': 25}, name='weight')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74347881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档