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

Posted

技术标签:

【中文标题】在 Julia 中定义一个非常稀疏的网络矩阵的最有效方法是啥?【英文标题】:What is the most efficient way to define a very sparse network matrix in Julia?在 Julia 中定义一个非常稀疏的网络矩阵的最有效方法是什么? 【发布时间】:2016-10-27 15:54:16 【问题描述】:

我有一个非常稀疏的大型网络的数据。我想知道如果两个节点已连接,那么最节省内存的存储方式和最容易访问的方式是什么。

显然,对于 N 个节点,就我存储的空间而言,保持 N*N 矩阵并不是那么有效。所以我想也许保留如下邻接列表:

Array(VectorInt64, N_tmp)

其中 N_tmp

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

【问题讨论】:

julia 中有一个内置的sparse() 函数。你试过it 吗? 我知道这一点,但我认为使用其他数据结构可以做得更好。 【参考方案1】:

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

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

使用附加信息进行编辑:我们存储一个排序的邻居列表 - 这给我们在创建边时的性能带来了影响,但可以更快地进行后续查找。

【讨论】:

以上是关于在 Julia 中定义一个非常稀疏的网络矩阵的最有效方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

图中的最短部分路径

如何在犰狳中更新稀疏矩阵的值

使用 scipy.sparse.bmat 从子块创建非常大的稀疏矩阵时出错

稀疏矩阵定义以及存储格式(COO,CSR,CSC)

稀疏矩阵及其压缩格式

稀疏矩阵存储方式