我按照以下方式创建了一个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
祝你一切顺利!