2013-10-04 155 views
0

在C++中尋找可輕鬆存儲和訪問不同大小矩陣的東西。我通常使用R,並且在RI可以如下(玩具示例)C++相當於R列表

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

這給我一個列表,其中myList中[[I]]將然後給我第i使用循環和存儲的矩陣中的列表 - 矩陣。在C++中有這樣的東西嗎?我已經看到Boost函數可以做不同大小的數組,但是不能將它們應用到矩陣中。試圖使用Eigen或犰狳,如果這有助於縮小反應。

回答

2

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

但是有很多其他容器可用。你應該調查this chart並自己選擇!