2 个不稳定版本

0.4.0 2024年1月3日
0.2.0 2023年12月22日

#1568 in 数学

Download history 455/week @ 2024-04-03 452/week @ 2024-04-10 1015/week @ 2024-04-17 229/week @ 2024-04-24 358/week @ 2024-05-01 327/week @ 2024-05-08 580/week @ 2024-05-15 189/week @ 2024-05-22 1323/week @ 2024-05-29 1026/week @ 2024-06-05 777/week @ 2024-06-12 408/week @ 2024-06-19 648/week @ 2024-06-26 723/week @ 2024-07-03 1644/week @ 2024-07-10 363/week @ 2024-07-17

3,408 每月下载量

MIT/Apache

44KB
1K SLoC

vector-expr

向量数学表达式解析器/评估器。

为什么?

性能。涉及许多变量的数学表达式评估可能因遍历表达式树或执行变量查找而产生显著的开销。我们通过一次对输入数据的向量进行中间操作(通过可选的数据并行性 rayon 功能)来分摊这种成本。

示例

use vector_expr::*;

fn binding_map(var_name: &str) -> BindingId {
    match var_name {
        "bar" => 0,
        "baz" => 1,
        "foo" => 2,
        _ => unreachable!(),
    }
}
let parsed = Expression::parse("2 * (foo + bar) * baz", &binding_map).unwrap();
let real = parsed.unwrap_real();

let bar = [1.0, 2.0, 3.0];
let baz = [4.0, 5.0, 6.0];
let foo = [7.0, 8.0, 9.0];
let bindings: &[&[f64]] = &[&bar, &baz, &foo];
let mut registers = Registers::new(3);
let output = real.evaluate(bindings, &mut registers);
assert_eq!(&output, &[64.0, 100.0, 144.0]);

许可证:MIT OR Apache-2.0

依赖项

~3–4MB
~89K SLoC