问题: 什么时候将一个二维数组(Eigen :: ArrayXXd)的{row或column}分配给{或从}一个数组(Eigen :: ArrayXd)?
背景 我正在使用使用2D数组(Eigen :: ArrayXXd)来存储一组数据的代码。然后,我有几个函数在该数据的单个列或行上运行。如果我将所有这些函数作为其输入和输出类型,那么它们可以自动使用数据集的行或列。话虽这么说,这些功能都只能在一组数字上运行。他们不需要知道特定的1D数据集来自2D阵列。如果我可以使用1D数组作为函数的输入和输出,它将简化输入验证和文档。
答案 0 :(得分:0)
看起来你可以使用一维数组来分配2D数组的行和从二维数组的行分配,在下面显示的几个简单情况。我不确定是否还有其他情况会失败。
#include <Eigen/Dense>
#include <iostream>
Eigen::ArrayXXd fun_2d_d2(Eigen::ArrayXXd data, double scale) { return data * scale; }
Eigen::ArrayXd fun_1d_1d(Eigen::ArrayXd data, double scale) { return data * scale; }
Eigen::ArrayXXd fun_2d_d2_cst(const Eigen::ArrayXXd& data, double val) { return data + val; }
Eigen::ArrayXd fun_1d_1d_cst(const Eigen::ArrayXd& data, double val) { return data + val; }
int main(int argc, char** argv)
{
// Create the data:
int nRow = 5; int nCol = 8;
Eigen::ArrayXXd data = Eigen::ArrayXXd::Constant(nRow, nCol, 1.0);
// Call functions with pass by value:
data.row(1) = fun_2d_d2(data.row(1), 3.0);
data.row(3) = fun_1d_1d(data.row(3), 4.0);
data.col(2) = fun_1d_1d(data.col(2), 5.0);
// Call functions with pass by constant reference:
data.row(4) = fun_2d_d2_cst(data.row(4), 3.0);
data.row(4) = fun_1d_1d_cst(data.row(3), 4.0);
data.col(5) = fun_1d_1d_cst(data.col(2), 5.0);
// Print the result:
std::cout << data << std::endl;
return 0;
}
此代码打印以下输出:
1 1 5 1 1 10 1 1
3 3 15 3 3 20 3 3
1 1 5 1 1 10 1 1
4 4 20 4 4 25 4 4
8 8 24 8 8 29 8 8