1

C++ で、さまざまなサイズの行列を簡単に格納およびアクセスできるものを探しています。私は通常Rを使用します.RIでは、次のようにループを使用してリストに行列を格納できます(おもちゃの例)

myList <- list(1)
for(i in 1:10){
myList[[i]] <- matrix(rnorm(i^2),i,i)
}

これにより、myList[[i]] が i 番目の行列を与えるリストが得られます。C++でこのようなものはありますか?さまざまなサイズの配列を実行できる Boost 関数を見たことがありますが、行列には​​適用できません。応答を絞り込むのに役立つ場合は、Eigen または Armadillo のいずれかを使用してみてください。

4

2 に答える 2

3

あなたが探している答えには2つの部分があります。

  1. マトリックス。
  2. これらすべての行列を保持するコンテナ。

したがって、行列について: 線形代数演算を行う予定がある場合は、事前に定義された多くの行列関数 (固有値、行列乗算など) が付属するArmadilloなどの特別なライブラリを使用することをお勧めします。特別な操作のない基本的な 2D データ ストレージである場合は、ベクトルの STL ベクトルを使用して行列を表すことをお勧めします。これらのコンテナーは動的なサイズ (実行中に自由に変更可能) であり、すべての要素はインデックスによってアクセス可能です。パトリックが言ったように、詳細情報はここにあります: cppreference.com

1 で満たされた整数の 3x3 行列の例は次のようになります。

std::vector< std::vector<int,int> > matrix(3,std::vector<int>(3,1));

次に、これらの行列をどこかに保存する必要があります。このため、それは本当にあなたのニーズに依存するでしょう. 最も単純な解決策は、行列のベクトルです (つまり、ベクトルのベクトルのベクトルです)。コードは R とまったく同じように動作し、インデックスで行列にアクセスできます。同等の C++ コードは次のとおりです。

#include<vector>
using namespace std;
typedef  vector< vector<int,int> > int_matrix_t;
...
vector<int_matrix_t> my_vector_of_matrices(10);
for (int i = 0; i<10; ++i) {
   my_vector_of_matrices[i] = some_function_that_outputs_a_matrix(i);
}

しかし、他にもたくさんのコンテナがあります。このチャートを調べて、自分で選択してください。

于 2013-10-04T01:26:26.253 に答える
2

std::vector を使用できると思います。

http://en.cppreference.com/w/cpp/container/vector

std::vector<Matrix> matrices;
matrices[i] = Matrix(data);
于 2013-10-04T00:41:57.000 に答える