【问题标题】:C++ equivalent of R listC++ 等价于 R 列表
【发布时间】:2013-10-04 00:36:50
【问题描述】:

寻找 C++ 中的一些东西,以便于存储和访问不同大小的矩阵。我通常使用 R,在 R 中我可以使用循环并将矩阵存储在列表中,如下所示(玩具示例)

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

这给了我一个列表,其中 myList[[i]] 将给我第 i 个矩阵。 C++中有这样的东西吗?我见过 Boost 函数可以处理不同大小的数组,但无法将它们应用于矩阵。如果这有助于缩小响应范围,则尝试使用 Eigen 或 Armadillo。

【问题讨论】:

    标签: c++ arrays size storage varying


    【解决方案1】:

    您正在寻找的答案有 2 个部分,即

    1. 矩阵。
    2. 容纳所有这些矩阵的容器。

    因此,对于矩阵:如果您打算进行线性代数运算,我建议您使用一些特殊的库,例如 Armadillo,它带有许多预定义的矩阵函数(例如特征值、矩阵乘法、 ETC。)。如果它只是基本的 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 并自己选择!

    【讨论】:

      【解决方案2】:

      我相信你可以使用 std::vector。

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

      std::vector<Matrix> matrices;
      matrices[i] = Matrix(data);
      

      【讨论】:

        猜你喜欢
        • 2016-07-21
        • 2015-10-26
        • 2011-10-09
        • 2011-10-03
        • 2021-07-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多