【发布时间】:2019-01-03 19:25:45
【问题描述】:
我正在用 Rust 编写一个神经网络的实现,并试图计算两个矩阵的点积。我有以下代码:
fn dot_product(a: Vec<f64>, b: Vec<f64>) -> f64 {
// Calculate the dot product of two vectors.
asserteq!(a.len(), b.len());
let mut product: f64;
for i in 0..a.len() {
product += a[i] * b[i];
}
product
}
这需要两个向量,a 和 b(长度相同)并执行逐元素乘法(将向量 a 的值 1 与向量 b 的值 1 相乘并将其添加到值向量 a 的 2 和向量 b 的值为 2 等等......)。
有没有更有效的方法,如果有,怎么做?
【问题讨论】:
-
对我来说看起来不错。我会一直使用它,直到你确信它是一个瓶颈。如果您已经确定需要尽可能快的速度,也许可以查看SIMD?
-
您可以使用迭代器在一行中完成,例如
a.into_iter().zip(b).map(|(a, b)| a*b).sum()。但我希望它会相当快,而不是明显更快(或更慢)。
标签: rust