Как добавить новые ребра в набор данных звездного графа?

Мне нужно добавить несколько дополнительных ребер в набор данных Cora с помощью звездного графа. Есть ли способ добавить ребра к текущему набору данных в библиотеке stellargraph?

      import stellargraph as sg
dataset = sg.datasets.Cora()

Например, в NetworkX мы можем добавить несколько ребер к существующему графу, используя add_edges_from(edgelist).

2 ответа

Недавно я столкнулся с подобным сценарием, и преобразование в формат туда и обратно было невозможно. В частности, поскольку предполагается, что он способен хранить графики, намного превышающие , будет точка, в которой преобразование будет невозможно.

Чтобы обойти это, я использовал numpyвозможности загрузки 1.2.1 .

С помощью вы можете сбросить массив ребер с помощью edge_arrays()в , затем соедините с ним любые желаемые ребра. Это намного легче с точки зрения памяти, так как pandasа также StellarGraphоба работают лучше, чем networkx.

Вот краткий пример:

      import pandas as pd
from stellargraph import IndexedArray, StellarGraph

#### original data / graph

nodes = IndexedArray(index=['a', 'b', 'c', 'd'])
original_edges = pd.DataFrame(
    {
        'source' : [0, 1, 2, 3, 0],
        'target' : [1, 2, 3, 0, 2]
    }
)
original_graph = StellarGraph(
    nodes, 
    original_edges
)

#### new data

new_edges = pd.DataFrame(
    {
        'source' : [3, 3],
        'target' : [1, 2]
    }
)

#### new graph

new_graph = StellarGraph(
    nodes, 
    pd.concat(
        [
            original_edges,
            new_edges
        ],
        ignore_index=True
    )
)

Вы не можете сделать это напрямую из stellargraph, начиная с версии 0.9. Вам придется использовать .to_networkx() чтобы преобразовать его обратно в формат networkX, добавьте ребра, а затем преобразуйте его обратно в звездный граф.

      from stellargraph import StellarGraph
import networkx as nx

g = StellarGraph.to_networkx(dataset)
g.add_edges_from(edgelist)
new_dataset = StellarGraph.from_networkx(g)
Другие вопросы по тегам