4

在 C++ 中实现元素乘积并不难:

vector<float> a_array;
vector<float> b_array;
vector<float> c_array;
vector<float> dot_array;
....
for(int i=0; i<a_array.size(); i++)
{
   float temp;
   temp = a_array[i]*b_array[i]*c_array[i];
   dot_array[i] = temp;
}

这是一个非常简单的实现,我想知道 STL 中是否已经有更有效的算法可用。谢谢!

4

3 回答 3

11

std::transform可用于将两个向量相乘:

#include <algorithm>
#include <functional>

// Precondition: b.size() >= a.size() && r.size() >= a.size()
std::transform(a.begin(), a.end(), b.begin(), r.begin(), std::multiplies<float>());

没有超过两个输入序列的类似标准算法。

于 2012-07-31T10:35:51.973 回答
7

看看std::inner_product

编辑当问题是关于点积时,我发布了这个答案。对于元素产品,请参阅std::transform的第二个版本。

于 2012-07-31T10:24:06.107 回答
0

该类std::vector实际上不是一个数学向量,而是一个动态大小的数组,一个集合。你可能会因为它的名字而感到困惑。最好定义一个vector实现数学运算的真实类,而不是(错误)使用std::vector.

于 2012-07-31T10:24:54.983 回答