如何向 stellargraph 数据集添加新边?
How to add new edges to the stellargraph dataset?
我需要使用 stellargraph 向 Cora 数据集添加一些额外的边。有没有办法将边添加到 stellargraph 库中的当前数据集?
import stellargraph as sg
dataset = sg.datasets.Cora()
例如在 NetworkX 中,我们可以使用 add_edges_from(edgelist)
.
向现有图形添加一些边
自 0.9 版起,您无法直接从 stellargraph 执行此操作。
您必须使用 .to_networkx()
将其转换回 networkX 格式,添加边,然后将其转换回 stellargraph。
from stellargraph import StellarGraph
import networkx as nx
g = StellarGraph.to_networkx(dataset)
g.add_edges_from(edgelist)
new_dataset = StellarGraph.from_networkx(g)
我最近 运行 遇到了类似的情况,无法将 back-and-forth 格式转换为 networkx
格式。具体来说,由于 StellarGraph
应该能够存储比 networkx
大得多的图形,所以会有一个点无法进行转换。
为了解决这个问题,我使用了 the numpy
loading capabilities of StellarGraph
1.2.1。
使用 StellarGraph
,您可以将带有 edge_arrays()
的边数组转储到 pandas
,然后将任何需要的边连接到它上面。它比 memory-wise 轻得多,因为 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 向 Cora 数据集添加一些额外的边。有没有办法将边添加到 stellargraph 库中的当前数据集?
import stellargraph as sg
dataset = sg.datasets.Cora()
例如在 NetworkX 中,我们可以使用 add_edges_from(edgelist)
.
自 0.9 版起,您无法直接从 stellargraph 执行此操作。
您必须使用 .to_networkx()
将其转换回 networkX 格式,添加边,然后将其转换回 stellargraph。
from stellargraph import StellarGraph
import networkx as nx
g = StellarGraph.to_networkx(dataset)
g.add_edges_from(edgelist)
new_dataset = StellarGraph.from_networkx(g)
我最近 运行 遇到了类似的情况,无法将 back-and-forth 格式转换为 networkx
格式。具体来说,由于 StellarGraph
应该能够存储比 networkx
大得多的图形,所以会有一个点无法进行转换。
为了解决这个问题,我使用了 the numpy
loading capabilities of StellarGraph
1.2.1。
使用 StellarGraph
,您可以将带有 edge_arrays()
的边数组转储到 pandas
,然后将任何需要的边连接到它上面。它比 memory-wise 轻得多,因为 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
)
)