gpt4 book ai didi

c++ - 如何将 Armadillo 矩阵转换为 vector vector ?

转载 作者:IT老高 更新时间:2023-10-28 22:59:57 26 4
gpt4 key购买 nike

我创建了一个 Armadillo c++ 矩阵如下:

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

我想将其转换为由

定义的 vector 组成的 vector
std::vector< std::vector<double> > B(3, std::vector<double>(4) ); 

如何设置 B 等于 A?如果 vector vector 没有简单的方法,那么数组数组呢,即,如果我将 B 定义为

double B[3][4]; 

最佳答案

在这种情况下,您应该使用 arma::conv_to这是 arma 的一个非常棒的功能。

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

#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

祝你好运!

关于c++ - 如何将 Armadillo 矩阵转换为 vector vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29088809/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com