Python 使用共享端点节点采样边

Python 使用共享端点节点采样边,python,graph,machine-learning,networkx,Python,Graph,Machine Learning,Networkx,我正在tensorflow中实现一个神经网络训练算法,该算法需要从一个图中对神经网络的输入进行采样,特别是我想创建从图中随机选取的一小批边,从邻域中随机选取,即共享一些端节点 现在,我有一个生成器,它从图中的所有边随机返回一批边。你对如何实现这一目标有什么建议吗 我认为应该有一种方法,使用networkx将图形划分为相邻边的列表,然后从这些划分中随机选取,直到所有边都已采样 提前感谢您对此的任何输入创建一个简单的图表: import networkx as nx D = nx.Graph() D

我正在tensorflow中实现一个神经网络训练算法,该算法需要从一个图中对神经网络的输入进行采样,特别是我想创建从图中随机选取的一小批边,从邻域中随机选取,即共享一些端节点

现在,我有一个生成器,它从图中的所有边随机返回一批边。你对如何实现这一目标有什么建议吗

我认为应该有一种方法,使用networkx将图形划分为相邻边的列表,然后从这些划分中随机选取,直到所有边都已采样

提前感谢您对此的任何输入

创建一个简单的图表:

import networkx as nx
D = nx.Graph()
D.add_path([1,2,3,4,5,6,7,8,9])
按节点将图形划分为相邻边列表:

partitions = list()
visited = set()
for node in D.nodes():
    if node not in visited:
        adjacent_edges = D.edges(node)
        partitions.append(adjacent_edges)
        for u, v in adjacent_edges:
            visited.add(u)
            visited.add(v)
        
如您所见,
partitions
是按边划分的分区列表

[(1,2)]

[(3,2)、(3,4)]

[(5,4)、(5,6)]

[(7,8)、(7,6)]

[(9,8)]]

现在,您希望从这些分区中随机拾取,直到耗尽所有边。这种方法将分区洗牌到位,以实现随机性

import random
for partition in partitions:
    random.shuffle(partition)
    for edge in partition:
        print(edge)

谢谢你,这很好,也很简单。为了完整性起见,我想在洗牌每个分区之前添加一个真正的随机抽样。应该添加洗牌(分区)。