Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Networkx创建具有节点属性的图形以确定连接的边_Python_Graph_Networkx - Fatal编程技术网

Python Networkx创建具有节点属性的图形以确定连接的边

Python Networkx创建具有节点属性的图形以确定连接的边,python,graph,networkx,Python,Graph,Networkx,我正在尝试创建一个连接图,其中每个节点都有一些属性,这些属性确定它连接到的其他节点。网络是一个圆形空间,便于建立链接(有1000个节点) 该网络的工作方式是,一个节点既有邻居(紧邻其左/右的邻居,即节点3有邻居1和2),也有k长距离链路。节点拾取长距离链接的方式是,它只是从顺时针方向随机拾取节点(即,节点25可能有200个节点作为其长距离链接,而不是15个) 下面是它可能看起来像什么的示例图像: 给定的是一个symphony网络,但我的实现是对它的简化 我在java中部分实现了这一点(通过一个包

我正在尝试创建一个连接图,其中每个节点都有一些属性,这些属性确定它连接到的其他节点。网络是一个圆形空间,便于建立链接(有1000个节点)

该网络的工作方式是,一个节点既有邻居(紧邻其左/右的邻居,即节点3有邻居1和2),也有k长距离链路。节点拾取长距离链接的方式是,它只是从顺时针方向随机拾取节点(即,节点25可能有200个节点作为其长距离链接,而不是15个)

下面是它可能看起来像什么的示例图像: 给定的是一个symphony网络,但我的实现是对它的简化

我在java中部分实现了这一点(通过一个包含arraylist的链表),但我不知道如何在NetworkX中实现这一点。我特别困惑于如何添加这些特定的节点属性,即一个节点将找到k个长链接,但在k之后将不再接受任何链接。networkx中是否有适合此模型的特定内置图,或者只要具有正确的节点属性,是否可以接受任何图

这是一个更复杂网络的简化,其中没有节点离开,也没有边消失


任何帮助或链接到一个例子将不胜感激

在NetworkX中,如果有任何关于连接节点的逻辑,一切都应该留给您

不过,如果您想在Python中的节点上迭代(未测试):


边注:如果你想留在爪哇,你也可以考虑使用Jung和Gephi。

< P>在NetworkX,如果有任何关于连接你的节点的逻辑,一切都应该留给你。 不过,如果您想在Python中的节点上迭代(未测试):


边注:如果你想留在爪哇,你也可以考虑使用Jung和Gephi。

< P>这近似于你的需要:

import networkx as nx
import matplotlib.pyplot as plt
import random

N = 20 # number of nodes
K = 3 # number of "long" edges

G = nx.cycle_graph(N)

for node in G.nodes():
    while len(G.neighbors(node)) < K+2:
        # Add K neighbors to each node
        # (each node already has two neighbors from the cycle)
        valid_target_found = False
        while not valid_target_found:
            # CAUTION
            # This loop will not terminate
            # if K is too high relative to N
            target = random.randint(0,N-1)
            # pick a random node
            if (not target in G.neighbors(node)
                and len(G.neighbors(target)) < K+2):
                # Accept the target if (a) it is not already
                # connected to source and (b) target itself
                # has less than K long edges
                valid_target_found = True
        G.add_edge(node, target)

nx.draw_circular(G)
plt.show()
将networkx导入为nx
将matplotlib.pyplot作为plt导入
随机输入
N=20#节点数
K=3#长边数
G=nx.循环图(N)
对于G.nodes()中的节点:
而len(G.邻居(节点))
它创建了下面的图表。还有一些改进需要改进,例如,为长边更有效地选择目标节点,但我希望这能让您开始


这与您的需求接近:

import networkx as nx
import matplotlib.pyplot as plt
import random

N = 20 # number of nodes
K = 3 # number of "long" edges

G = nx.cycle_graph(N)

for node in G.nodes():
    while len(G.neighbors(node)) < K+2:
        # Add K neighbors to each node
        # (each node already has two neighbors from the cycle)
        valid_target_found = False
        while not valid_target_found:
            # CAUTION
            # This loop will not terminate
            # if K is too high relative to N
            target = random.randint(0,N-1)
            # pick a random node
            if (not target in G.neighbors(node)
                and len(G.neighbors(target)) < K+2):
                # Accept the target if (a) it is not already
                # connected to source and (b) target itself
                # has less than K long edges
                valid_target_found = True
        G.add_edge(node, target)

nx.draw_circular(G)
plt.show()
将networkx导入为nx
将matplotlib.pyplot作为plt导入
随机输入
N=20#节点数
K=3#长边数
G=nx.循环图(N)
对于G.nodes()中的节点:
而len(G.邻居(节点))
它创建了下面的图表。还有一些改进需要改进,例如,为长边更有效地选择目标节点,但我希望这能让您开始


这样的问题可能会从中受益:1)您如何尝试移植部分Java实现,2)某种形式的图表使人们更容易将其可视化。这样的问题可能会受益:1)您如何尝试移植部分Java实现,2)某种形式的图表使人们更容易将其可视化实际上,在过去的3个小时里实现了一些非常类似的东西(查看教程:)。但是你选择节点的方法比我使用一大堆在特定范围内生成随机值的方法要好得多。这应该让我开始了,因为我有很多工作要在一个大的网络上工作。在过去的3个小时里,我实际上实现了一些非常类似的教程:)。但是你选择节点的方法比我使用一大堆在特定范围内生成随机值的方法要好得多。这应该让我开始,因为我有很多工作,使它在一个大型网络上工作。