高效的图数据结构Python

时间:2019-02-25 02:43:52

标签: python graph-theory numpy-ndarray

我在机器学习算法中使用了加权图数据结构,该结构需要频繁的更改(插入,顶点和边的删除)。我目前正在使用通过numpy 2d数组实现的邻接矩阵,条目为

select
mod(mod(floor(ip/16777216),256) + 256, 256) ||'.'||
mod(mod(floor(ip/65536),   256) + 256, 256) ||'.'||
mod(mod(floor(ip/256),     256) + 256, 256) ||'.'||
mod(mod(ip,                256) + 256, 256) as decoded_ip
from addr; 

这对于边缘| V |非常适用<1,500,但搜索,插入和删除操作的速度确实过慢。

由于我正在基于权重使用图嵌入的矢量化优化,因此我需要使用numpy数组,因此在这种情况下使用列表是不可行的。

是否存在可用于存储的图形的有效实现,以及可以使用Python编写的图形上的操作?

2 个答案:

答案 0 :(得分:2)

正如问题中提到的那样,当图稀疏时,很难击败邻接表的性能。邻接矩阵始终会为稀疏图浪费大量空间,因此您可能必须在所有操作中都找到使用numpy数组的替代方法。

一些可能解决您问题的方法可能是:

  • 对其他操作使用邻接列表结构,并在必要时转换为2d numpy数组(可能无效)

  • 使用sparse matrix:尝试使用稀疏矩阵,这样您仍然可以进行矩阵运算而无需来回转换。您可以在此blog post中阅读有关它们的更多信息。请注意,如果您选择此解决方案,则必须在代码中将一些numpy操作替换为它们的scipy.sparse等效项。

答案 1 :(得分:0)

尝试使用NetworkX库,这是处理Graph数据结构的最佳库之一。