【发布时间】:2013-03-04 22:27:03
【问题描述】:
我有
vector < vector < int > > data_mat ( 3, vector < int > (4) );
vector < int > data_vec ( 3 );
其中data_mat 可以被认为是一个矩阵,data_vec 是一个列向量,我正在寻找一种方法来计算data_mat 的每一列与data_vec 的内积,并存储它在另一个vector < int > data_out (4)。
示例http://liveworkspace.org/code/2bW3X5%241 使用for_each 和transform,可用于计算矩阵的列和:
sum=vector<int> (data_mat[0].size());
for_each(data_mat.begin(), data_mat.end(),
[&](const std::vector<int>& c) {
std::transform(c.begin(), c.end(), sum.begin(), sum.begin(),
[](int d1, double d2)
{ return d1 + d2; }
);
}
);
是否有可能以类似的方式(或以稍微不同的方式使用 STL 函数)计算矩阵列与向量的列点积?
问题是 'd2 = d1 + d2' 技巧在列内积情况下在这里不起作用 - 如果有办法包含 d3 以及可以解决它(d3 = d3 + d1 * d2 ) 但transform 中似乎不存在三元函数。
【问题讨论】:
-
Npte,如果你想做严肃的数学,那么可能是时候转储 stl 并使用像 GSL 这样的 C 库了。 stl竟然会搞这种事情让我很吃惊,速度差大概是2个数量级……
-
我不确定我是否理解您想要实现的目标。你说的是点积,但我在这里看不到乘法
-
我没有点积的代码,如列和代码示例下方的文本中所述(请参阅文本中的乘法)。 AFAIK 没有办法在变换中做
{ d3 + d1 * d2; }。 -
好吧,不需要去任何 C 库,STL 没问题,但是 Matt 至少是正确的,如果你想做严肃的数学,那么至少放弃这个非常不合适的向量向量并使用适当的矩阵数据结构(存储其内部数据连续)。谁告诉你动态数组的动态数组是表示二维数组的好方法完全错误。不过,除此之外,这仍然是一个有趣的问题。
标签: c++ vector matrix iterator dot-product