6 个版本

0.1.41 2022 年 10 月 3 日
0.1.6 2022 年 10 月 15 日
0.1.3 2022 年 9 月 14 日

#1943算法

每月 37 次下载
用于 oxygraphis

MIT 许可证

84KB
1.5K SLoC

氧图

oxygraph 是一个用于分析二分图的 Rust 库,并实现了几个算法以及可视化。

具有以下功能:

  • 可视化二分图及其导出,以及交互矩阵。
  • 计算二分图和交互矩阵的基本统计数据。
  • 通过 Erdös-Rényi 过程创建随机的二分图。
  • 计算嵌套度和模块度的算法。

二分图是对 petgraph 图的薄包装,交互矩阵是二维 ndarray

由于包装很薄,实现新的度量/算法应该很简单。

一个示例,说明从 TSV 初始化图

// main bipartite graph struct
use oxygraph::BipartiteGraph;
// Enum for which strata there are in a bipartite graph
use oxygraph::bipartite::Strata;
// Interaction matrix struct
use oxygraph::InteractionMatrix;
// LPAWB+ algorithm
use oxygraph::modularity::lpa_wb_plus;

// read in some data
// in the format:
// from    to    weight
// 0       1     1.0 
// etc ...
let bpgraph = BipartiteGraph::from_dsv("path/to/tsv", b'\t').unwrap();
// is the graph bipartite?
let strata = bpgraph.is_bipartite();

match stata {
    Strata::Yes(map) => println!("{:?}", map),
    // tell the user which nodes are the offenders.
    Strata::No => {
        panic!("Uh oh, your graph isn't bipartite!");
    }
}

// basic stats
println!("{:?}", bpgraph.stats());

// calculate NODF
let mut im = InteractionMatrix::from_bipartite(bpgraph);
println!("{}", im.nodf().unwrap());

// make a random bipartite graph
let rand_graph = BipartiteGraph::random(80, 100, 250).unwrap();
let mut im_rand = InteractionMatrix::from_bipartite(rand_graph);
// and calculate modularity
let modularity = lpa_wb_plus(rand_graph, None);
println!("{:?}", modularity);

依赖项

~6.5MB
~103K SLoC