#稀疏 #张量 #索引 #前缀树 #压缩 # #纤维

compressed-sparse-fiber

Rust的压缩稀疏纤维实现

6 个版本

0.0.6 2022年2月21日
0.0.5 2022年2月21日
0.0.4 2021年4月9日
0.0.3 2021年3月31日

#2033 in 数据结构

Apache-2.0

11KB
216

compressed-sparse-fiber

Build Status Crates.io Documentation

CSF是压缩稀疏行(CSR)索引的推广。见 smith2017knl

CSF索引递归地将张量的每个维度压缩成一组前缀树。从根到叶子的每条路径形成张量非零索引中的一个。CSF使用两个缓冲区数组和一个整数数组实现。

示例用法

let rows = vec![
    (vec![1, 1, 1, 2], 1.0),
    (vec![1, 1, 1, 3], 2.0),
    (vec![1, 2, 1, 1], 3.0),
    (vec![1, 2, 1, 3], 4.0),
    (vec![1, 2, 2, 1], 5.0),
    (vec![2, 2, 2, 1], 6.0),
    (vec![2, 2, 2, 2], 7.0),
    (vec![2, 2, 2, 3], 8.0),
];

let csf: CompressedSparseFiber<_,_> = rows.into_iter().collect();                       

上述内容可以用以下结构表示

CompressedSparseFiber { 
    fptr: [[0, 2, 3], [0, 1, 3, 4], [0, 2, 4, 5, 8]], 
    fids: [[1, 2], [1, 2, 2], [1, 1, 2, 2], [2, 3, 1, 3, 1, 1, 2, 3]], 
    vals: [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0] 
}

以未压缩形式检索

for t in csf {
    println!("{:?}", t);
}

参考

依赖项

~33KB