c++ 如何将STL vector of vector转换为犰狳垫?

nfs0ujit  于 2023-06-07  发布在  其他
关注(0)|答案(2)|浏览(149)

给定vector<vector<double > > A_STL,我希望将其转换为arma::mat A

vq8itlhq

vq8itlhq1#

一个简单的方法是将向量矩阵的向量展平为一维向量。因此可以使用mat(std::vector)构造函数。
代码示例(未测试):

// Flatten your A_STL into A_flat
std::vector<double> A_flat;
for (auto vec : A_STL) {
  for (auto el : vec) {
    A_flat.push_back(el);
  }
}
// Create your Armadillo matrix A
mat A(A_flat);

注意你如何安排你的向量的向量。A_flat应该是column major。

8xiog9wr

8xiog9wr2#

以下几行应该可以完成这项工作:

template<typename T>
arma::Mat<T> convertNestedStdVectorToArmadilloMatrix(const std::vector<std::vector<T>> &V) {
    arma::Mat<T> A(V.size(), V[0].size());

    for (unsigned_t i{}; i < V.size(); ++i) {
        A.row(i) = arma::conv_to< arma::Row<T> >::from(V[i]);
    }
    return A;
}

试验用:

std::vector<std::vector<float_type>> vec = {{1.0, 2.0, 3.0}, {4.0, 5.0, 6.0}};
arma::Mat<float_type> mat = convertNestedStdVectorToArmadilloMatrix(vec);

相关问题