如何将STL中的二维向量转换为Armadillo矩阵?

7

给定一个vector<vector<double>> A_STL,我想将其转换为arma::mat A


你尝试了什么?哪些方法没有奏效?为什么你还要坚持搞乱你的格式? - Quentin
因为A_STL实际上是一个向量的向量,而不仅仅是一个双精度向量。 - Palash Kumar
是的,我看到了,但没有改变它。但是如果缺少“proper formatting”(正确格式),你的模板实例将被视为格式错误的HTML标记而被剥离。 - Quentin
1
好的。明白了。已修复。谢谢。 - Palash Kumar
2个回答

6

一个简单的方法是将您的向量矩阵压缩成一维向量。因此,您可以使用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 应该是按列主序排列的。


在创建arma::mat时,宽度和高度维度是如何确定(指定)的? - Amir Rasti
在构造函数中提供它是可能的吗?还是应该使用reshape方法来应用它? - Amir Rasti

0
以下几行代码可以完成这个任务:
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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接