初始化argmin库NelderMead结构体时遇trait未实现错误
解决argmin crate中NelderMead初始化的Trait错误
错误原因
argmin的Nelder-Mead优化算法要求参数类型实现argmin_math crate中定义的数值运算Trait(如ArgminAdd、ArgminSub、ArgminMul),但Rust标准库的Vec<f64>并未实现这些Trait,直接使用会触发编译错误。argmin对ndarray类型提供了内置支持,应使用ndarray的一维数组类型来替代标准Vec。
修正方案
- 启用argmin的ndarray特性:在
Cargo.toml中更新依赖配置,确保argmin启用ndarray特性:
[dependencies] argmin = { version = "10.0.0", features = ["ndarray"] } ndarray = "0.16.1"
- 替换参数类型:将原代码中的
Vec<Vec<f64>>替换为Vec<Array1<f64>>,并调整NelderMead的类型参数。
修正后的完整代码
use argmin::solver::neldermead::NelderMead; use ndarray::Array1; fn example() { let vec_of_parameters = vec![ Array1::from_vec(vec![1.0]), Array1::from_vec(vec![2.0]), ]; let nm: NelderMead<Array1<f64>, f64> = NelderMead::new(vec_of_parameters); }
内容的提问来源于stack exchange,提问作者Ioannis Kingdom
相关产品推荐
相关产品推荐

