我将对拥有10^6+元素的多个向量进行逐元素乘法。在性能分析中,这被标记为代码中最慢的部分之一,那么我该如何改进它呢?
/// element-wise multiplication for vecs
pub fn vec_mul<T>(v1: &Vec<T>, v2: &Vec<T>) -> Vec<T>
where
T: std::ops::Mul<Output = T> + Copy,
{
if v1.len() != v2.len() {
panic!("Cannot multiply vectors of different lengths!")
}
let mut out: Vec<T> = Vec::with_capacity(v1.len());
for i in 0..(v1.len()) {
out.push(v1[i] * v2[i]);
}
out
}
v1.iter().zip(v2).map(|(&i1, &i2)| i1 * i2).collect()
? - Francis GagnéVec::with_capacity
预先分配足够的内存;这里不应该重新调整Vec
的大小。Iterator::collect
也使用Vec::with_capacity
。 - Francis Gagné