2016-05-28 6 views
0

注:私はC++用の標準ライブラリを使用しており、多次元ベクトルとして行列を格納しています(下記の例を参照)。C++で2つの行列をどのように掛けるべきですか?

C++で2つの行列を掛ける適切な関数を見つけるのに問題があります。私は何をしようとしている明確にする:

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); 

| 1.8631586 | 
| 0.4413864 | 

は、どのように私は上記のをやって行くべきですか?

+1

preiciseにするには、ベクトルにベクトルのベクトルとして表される行列をベクトルに乗算しようとしています。 'std :: vector'はこの種のもののために特に設計されていません。何かを試してください。固有ライブラリ –

+1

2つのベクトルを掛け合わせていないので、2つの行列を乗算しています。 C++の標準的なベクトルライブラリは、数学的行列とは何の関係もありません。 (私は数学では、ベクトルは1次元行列と見なされますが、その概念はここでは適用されません) –

答えて

1

いいえ、ベクトル乗算のためのC++ライブラリには関数がありません。 std::for_each,std::copy、およびstd::transformのようないくつかのビルディングブロックがありますが、それらは実装に使用できますが、完全なアルゴリズムは自分で実装する必要があります。

Intertubesのどこかに、これらのアルゴリズムを実装しているライブラリがあるかもしれません。あなたはGoogleであなたの運を試すことができます。

+0

Blas?gemvには、mklやacmlのようないくつかの事前構築オプションがあります。 – tim18

1

行列のようにベクトルを掛ける関数はないと思いますが、自分で実装するのは難しくありません。私は行列クラスを作成することをお勧めします。これで、*演算子がオーバーロードされる可能性があります。これは次のようになります。

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 
} 

これにより、2つの行列を掛ける簡単なアルゴリズムを開発できます。

関連する問題