我在机器学习算法中使用了加权图数据结构,该结构需要频繁的更改(插入,顶点和边的删除)。我目前正在使用通过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编写的图形上的操作?
答案 0 :(得分:2)
正如问题中提到的那样,当图稀疏时,很难击败邻接表的性能。邻接矩阵始终会为稀疏图浪费大量空间,因此您可能必须在所有操作中都找到使用numpy数组的替代方法。
一些可能解决您问题的方法可能是:
对其他操作使用邻接列表结构,并在必要时转换为2d numpy数组(可能无效)
使用sparse matrix:尝试使用稀疏矩阵,这样您仍然可以进行矩阵运算而无需来回转换。您可以在此blog post中阅读有关它们的更多信息。请注意,如果您选择此解决方案,则必须在代码中将一些numpy操作替换为它们的scipy.sparse等效项。
答案 1 :(得分:0)
尝试使用NetworkX
库,这是处理Graph
数据结构的最佳库之一。