在 Julia 中定义非常稀疏的网络矩阵的最有效方法是什么?

What is the most efficient way to define a very sparse network matrix in Julia?

我有一个非常稀疏的非常大的网络的数据。我想知道无论两个节点是否连接,什么是内存最有效的存储方式和最容易访问的方式。

显然,对于 N 个节点,保留 N*N 矩阵在 space I 存储方面效率不高。所以我想也许保留如下的邻接列表:

Array(Vector{Int64}, N_tmp)

其中 N_tmp <= N,因为很多节点可能没有任何连接。

你能帮我看看有没有更好的方法或者在内存和访问方面更好的包?

LightGraphs.jl中,我们使用邻接表(基本上是向量的向量)来存储每个节点的邻居。这为大型稀疏图提供了非常好的内存利用率,使我们能够在商品硬件上扩展到数亿个节点,同时为大多数图操作提供击败原生稀疏矩阵数据结构的快速访问。

您可能会考虑 LightGraphs 是否会直接满足您的需求。

使用附加信息进行编辑:我们存储经过排序的邻居列表 - 这会降低边创建的性能,但可以更快地进行后续查找。