给定vector<vector<double > > A_STL,我希望将其转换为arma::mat A。
vector<vector<double > > A_STL
arma::mat A
vq8itlhq1#
一个简单的方法是将向量矩阵的向量展平为一维向量。因此可以使用mat(std::vector)构造函数。代码示例(未测试):
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。
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);
2条答案
按热度按时间vq8itlhq1#
一个简单的方法是将向量矩阵的向量展平为一维向量。因此可以使用
mat(std::vector)
构造函数。代码示例(未测试):
注意你如何安排你的向量的向量。A_flat应该是column major。
8xiog9wr2#
以下几行应该可以完成这项工作:
试验用: