图转换

在GraphScope中,可以从GraphScope图对象创建nx.Graphnx.DiGraph。 我们采用写时复制转换策略来从GraphScope图创建这些对象。 也就是说,当使用GraphScope图对象初始化nx.Graphnx.DiGraph时, 我们不会立即将箭头属性图转换为动态属性图, 而是直接将箭头属性图托管在nx.Graphnx.DiGraph对象中。 该图可以正常报告图信息并运行算法。 当图需要进行修改操作时,箭头属性图才会转换为动态属性图,这就是写时复制转换策略。 以下是一个展示写时复制转换的示例。

注意:nx.Graphnx.DiGraph 不支持从包含平行边的 GraphScope 多重图中创建。如果输入图是多重图,将会抛出 NetworkXError 错误。

>>> # first create a labeled graphscope graph
>>> graph = graphscope.g()
>>> graph.add_vertices("v_0.csv", label="v0")
>>> graph.add_vertices("v_1.csv", label="v1")
>>> graph.add_edge("e.csv", label="e", src_label="v0", dst_label="v1")

>>> # then we init a nx.Graph with graph, here we set v0 as default vertex label
>>> G = nx.Graph(graph, default_label="v0")  # G actually hosts a arrow property graph

>>> # we can report info of G or run algorithm without converting to dynamic property graph
>>> print(G.nodes)
[0, ("v1", 1)]
>>> nx.builtin.pagerank(G)

>>> # when comes to the modification, hosted arrow property graph convert to dynamic property graph
>>> G.add_node(1)
>>> print(G.nodes)
[0, 1, ("v1", 1)]
graphscope.nx.Graph.__init__(self, incoming_graph_data=None, default_label=None, **attr)

使用图、边、名称或图属性初始化一个图

Parameters:
  • incoming_graph_data (输入图数据 (可选, 默认: None)) - 用于初始化图的数据。如果为None(默认值)则创建一个空图。数据可以是边列表、任何NetworkX图对象或任何GraphScope图对象。如果安装了相应的可选Python包,数据也可以是2D NumPy数组或SciPy稀疏矩阵

  • default_label (默认节点标签 (可选, 默认: "_")) – 如果incoming_graph_data是GraphScope图对象,default_label表示可以直接通过id访问该标签的节点,其他标签节点需要使用(label, id)来访问。

  • attr (关键字参数可选默认=无属性) - 以键值对形式添加到图中的属性。

另请参阅

convert

示例

>>> G = nx.Graph()  # or DiGraph
>>> G = nx.Graph(name='my graph')
>>> e = [(1, 2), (2, 3), (3, 4)]  # list of edges
>>> G = nx.Graph(e)

可以分配任意的图属性键值对(key=value)

>>> G = nx.Graph(e, day="Friday")
>>> G.graph
{'day': 'Friday'}

由GraphScope图对象创建

>>> g = graphscope.g(directed=False)  # if transform to DiGraph, directed=True
>>> g.add_vertices("person.csv", label="person").add_vertices("comment.csv", label="comment").add_edges(...)
>>> G = nx.Graph(g, default_label="person") # or DiGraph
graphscope.nx.Graph._convert_arrow_to_dynamic(self)

尝试将托管图从arrow_property转换为dynamic_property。

备注

该方法由修改和图视图方法隐式调用。