我应该如何在C ++中乘以两个矩阵?

时间:2016-05-28 21:49:45

标签: c++ vector

注意:我使用C ++标准库,并将矩阵存储为多维向量(参见下面的示例)。

我无法找到在C ++中乘以两个矩阵的正确函数。澄清我试图做的事情:

A = | a1 a2 |  B = | b1 |
    | a3 a4 |      | b2 |

Result = | (a1 * b1 + a2 * b2) |
         | (a3 * b1 + a4 * b2) |

显然我可以使用一个简单的算法来做到这一点,但我试图找出是否有这样做的功能。

我在C ++中的具体示例:

#include <vector>

std::vector<std::vector<double>> A;
A.push_back({ 0.96, 0.56 });
A.push_back({ 0.01, 0.41 });

std::vector<std::vector<double>> B;
B.push_back({ 1.331749 });
B.push_back({ 1.0440705 });

Result = (A * B);

&#34; 结果&#34;将是:

| 1.8631586 |
| 0.4413864 |

我应该如何进行上述操作?

2 个答案:

答案 0 :(得分:1)

不,C ++库中没有用于向量乘法的函数。有一些构建块,如std::for_eachstd::copystd::transform,可用于实现它们,但您可以自己实现完整的算法。

可能有一些库在Intertubes上的某处浮动,它们实现了这些算法。你可以试试Google的运气。

答案 1 :(得分:1)

我不相信有一个函数可以像matrices一样将向量相乘,但是你自己实现它并不困难。我建议创建一个矩阵类。有了这个,你可以重载*运算符。这看起来如下:

class Matrix
{
private:
    // Whatever implementation you choose.
    // This would probably be done with a vector of vectors.
public:
    Matrix& operator*(const Matrix&) const;
    // Public interface
}

这将允许您开发一种用于乘以两个矩阵的简单算法。