在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中是否有更高效的算法。谢谢!
答案 0 :(得分:10)
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>());
没有类似的标准算法,只有两个以上的输入序列。
答案 1 :(得分:7)
编辑当问题是关于点积时,我发布了这个答案。对于元素产品,请参阅std::transform的第二个版本。
答案 2 :(得分:0)
std::vector
类实际上不是数学矢量,而是一个动态大小的数组,一个集合。你可能因为它的名字而感到困惑。定义一个实现数学运算的真实vector
类,而不是{mis}使用std::vector
。