Это не полный исчерпывающий ответ, но я хотел бы поделиться небольшим кодом.
Ваша реализация выглядит так же, как и я, если бы я не знал, что это является узким местом в моем приложении.Затем я рассмотрю более эзотерические подходы (возможно, SIMD ).
Тем не менее, вы можете изменить свою функцию, чтобы вместо нее использовать ссылки на фрагменты.Таким образом, вы можете передать Vec
s или массивы:
fn dot_product(a: &[f64], b: &[f64]) -> f64 {
// Calculate the dot product of two vectors.
assert_eq!(a.len(), b.len());
let mut product = 0.0;
for i in 0..a.len() {
product += a[i] * b[i];
}
product
}
fn main() {
println!("{}", dot_product(&[1.0,2.0], &[3.0,4.0]));
println!("{}", dot_product(&vec![1.0,2.0], &vec![3.0,4.0]));
}
См. Также: