将特征数组类型转换为二维std::向量



这个线程建议将Eigen::VectorXd的数据复制到std::vector

然而,我想知道什么是最干净的方式来类型转换/复制一个二维数组到std::vector<std::vector<double>>

您可以在您共享的线程中执行相同的操作,但是对每列(默认为Eigen::ColMajor)或每行(Eigen::RowMajor)执行此操作:

Eigen::MatrixXd mat(2,3);
mat << 1.1, 2.1, 3.1,
4.1, 5.1, 6.1;
std::vector<std::vector<double>> matrix(mat.cols());
auto ptr = mat.data();
for (auto& vec : matrix)
{
vec = std::vector<int>(ptr, ptr + mat.rows());
ptr += mat.rows();
}

一种方法是使用循环遍历数组的所有值,然后将它们存储在vector中。

int ar[2][2];
vector<vector<int>> vec;
int main()
{
ar[0][0] = 1;
ar[0][1] = 2;
ar[1][0] = 3;
ar[1][1] = 4;
for(int i = 0; i < 2; i++)
{
vector<int>v;
for(int j = 0; j < 2; j++)
{
v.push_back(ar[i][j]);
}
vec.push_back(v);
}
for(int i = 0; i < vec.size(); i++)
{
for(int j = 0; j < vec[i].size(); j++) cout<<vec[i][j]<<" ";
cout<<endl;
}
}

另一种方法:遍历每一行并将它们存储在vector中。

int ar[2][2];
vector<vector<int>> vec;
int main()
{
int row = 2, col = 2;
ar[0][0] = 1;
ar[0][1] = 2;
ar[1][0] = 3;
ar[1][1] = 4;
for(int i = 0; i < row; i++)
{
vector<int> currV = {vector<int> (begin(ar[i]), end(ar[i]))};
vec.push_back(currV);
}
for(int i = 0; i < vec.size(); i++)
{
for(int j = 0; j < vec[i].size(); j++) cout<<vec[i][j]<<" ";
cout<<endl;
}
}

最新更新