繁体   English   中英

如何将犰狳矩阵转换为向量矢量?

[英]How do I convert an armadillo matrix to a vector of vectors?

我创建了一个armadillo c ++矩阵,如下所示:

arma::mat A; 
A.zeros(3,4);

我想将它转换为由定义的向量向量

std::vector< std::vector<double> > B(3, std::vector<double>(4) ); 

如何将B设置为A? 如果对于矢量矢量没有简单的方法,那么阵列数组呢,即如果我将B定义为什么

double B[3][4]; 

在这种情况下,你应该使用arma::conv_to ,它是arma的完美特征。

请注意,此方法将要求源对象能够被解释为向量。 这就是为什么我们需要为每一行迭代地执行此操作。 这是一种转换方法:

#include <armadillo>

typedef std::vector<double> stdvec;
typedef std::vector< std::vector<double> > stdvecvec;

stdvecvec mat_to_std_vec(arma::mat &A) {
    stdvecvec V(A.n_rows);
    for (size_t i = 0; i < A.n_rows; ++i) {
        V[i] = arma::conv_to< stdvec >::from(A.row(i));
    };
    return V;
}

这是一个示例用法:

#include <iomanip>
#include <iostream>

int main(int argc, char **argv) {
    arma::mat A = arma::randu<arma::mat>(5, 5);
    std::cout << A << std::endl;

    stdvecvec V = mat_to_std_vec(A);
    for (size_t i = 0; i < V.size(); ++i) {
        for (size_t j = 0; j < V[i].size(); ++j) {
            std::cout << "   "
                << std::fixed << std::setprecision(4) << V[i][j];
        }
        std::cout << std::endl;
    }
    return 0;
}

std::setprecision用于生成更可读的输出:

0.8402   0.1976   0.4774   0.9162   0.0163
0.3944   0.3352   0.6289   0.6357   0.2429
0.7831   0.7682   0.3648   0.7173   0.1372
0.7984   0.2778   0.5134   0.1416   0.8042
0.9116   0.5540   0.9522   0.6070   0.1567

0.8402   0.1976   0.4774   0.9162   0.0163
0.3944   0.3352   0.6289   0.6357   0.2429
0.7831   0.7682   0.3648   0.7173   0.1372
0.7984   0.2778   0.5134   0.1416   0.8042
0.9116   0.5540   0.9522   0.6070   0.1567

祝你有个好的一天!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM