2 个不稳定版本
0.4.0 | 2024年1月3日 |
---|---|
0.2.0 | 2023年12月22日 |
#1568 in 数学
3,408 每月下载量
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