计算有向图(河流网络)中每条边的重量累积

2024-09-30 01:29:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有流顺序和权重属性(与此流相关的垃圾总数)的河网形状文件。如何使用python和networkx模块计算下游权重的累积?你知道吗

我在networkx中寻找合适的工具,但是没有找到,或者可能在参考文献中有误解。你知道吗


Tags: 模块文件工具networkx属性顺序参考文献垃圾
1条回答
网友
1楼 · 发布于 2024-09-30 01:29:23

我已经用算法解决了这个问题。它似乎处理节点并返回节点集,我们可以对其进行总结。这不是很方便,因为我们需要从流到节点获得权重,然后将它们从节点到流关联起来。但它确实起作用了。你知道吗

import networkx as nx
import os
dir = r'd:\YandexDisk\Projects\Bali'
os.chdir(dir)
G = nx.read_shp(r'Rivers_network.shp')
nodes = nx.nodes(G)
edges = nx.edges(G)
total_dict = nx.get_edge_attributes(G, 'Total')
for node in nodes:
    ancestors = list(nx.ancestors(G, node))
    sum_weight = 0
    for coords in ancestors:
        for edge in edges:
            if tuple([edge[0][0], edge[0][1]]) == tuple([coords[0], coords[1]]):
                sum_weight += int(total_dict[edge])
    print(sum_weight)
    for edge in edges:
        if edge[0] == node:
            accum_edge = {edge: sum_weight}
            nx.set_edge_attributes(G, accum_edge, 'Accum')
nx.write_shp(G, dir)

相关问题 更多 >

    热门问题