将 Eigen 数组行保存在变量中
Save Eigen array row in a variable
我正在尝试从 Eigen::ArrayXXi
中提取第 j
行并将其存储在一个变量中。这是我试过的。
Eigen::Array<int, arr.rows(), arr.cols()> row = arr.row(j);
但是我得到以下突出显示的错误 arr.rows()
Non-type template argument of type 'Eigen::Index' (aka 'long') is not an integral constant expression
我找不到 arr.row()
的 return 类型。根据文档,它是 RowExpr
,这对我来说毫无意义。
您不能使用
Eigen::Array<int, arr.rows(), arr.cols()> row = arr.row(j);
因为 rows()
和 cols()
不是 constexpr
,因此它们不是错误消息中所写的常量表达式:https://eigen.tuxfamily.org/dox/structEigen_1_1EigenBase.html#ab75c2d8a783d055db397319c5a330eee .
您有两个选择,如果大小在编译时已知,则对值进行硬编码,否则,如本教程中所述https://eigen.tuxfamily.org/dox/group__TutorialArrayClass.html 使用:
Eigen::Array<int, Dynamic, Dynamic> row = arr.row(j);
具有动态尺寸。有关使用动态大小的更多信息,请参阅 Matrix
的文档,该文档引用自 Array
的文档:https://eigen.tuxfamily.org/dox/classEigen_1_1Matrix.html
我可以看到 Eigen::Array<int, Dynamic, Dynamic>
的别名是 ArrayXXi
:https://eigen.tuxfamily.org/dox/group__arraytypedefs.html#gab2c3a894f02fb9fdbc3de996c9d02312
Edit 正如用户 ggael 所指出的,如果我们至少知道一个维度,也可以使用 ArrayXi
,即 1。
如果你想要它的副本,那么你可以在一维数组中分配它:
ArrayXi arr_j = arr.row(j);
如果您想保留一行是 1xN
的事实,那么:
Array<int,1,Dynamic> arr_j = arr.row(j);
或(等价地):
auto arr_j = arr.row(j).eval();
最后,如果你想引用原始数据,那么:
auto arr_j = arr.row(j);
或(等价地):
ArrayXXi::RowExpr arr_j = arr.row(j);
我正在尝试从 Eigen::ArrayXXi
中提取第 j
行并将其存储在一个变量中。这是我试过的。
Eigen::Array<int, arr.rows(), arr.cols()> row = arr.row(j);
但是我得到以下突出显示的错误 arr.rows()
Non-type template argument of type 'Eigen::Index' (aka 'long') is not an integral constant expression
我找不到 arr.row()
的 return 类型。根据文档,它是 RowExpr
,这对我来说毫无意义。
您不能使用
Eigen::Array<int, arr.rows(), arr.cols()> row = arr.row(j);
因为 rows()
和 cols()
不是 constexpr
,因此它们不是错误消息中所写的常量表达式:https://eigen.tuxfamily.org/dox/structEigen_1_1EigenBase.html#ab75c2d8a783d055db397319c5a330eee .
您有两个选择,如果大小在编译时已知,则对值进行硬编码,否则,如本教程中所述https://eigen.tuxfamily.org/dox/group__TutorialArrayClass.html 使用:
Eigen::Array<int, Dynamic, Dynamic> row = arr.row(j);
具有动态尺寸。有关使用动态大小的更多信息,请参阅 Matrix
的文档,该文档引用自 Array
的文档:https://eigen.tuxfamily.org/dox/classEigen_1_1Matrix.html
我可以看到 Eigen::Array<int, Dynamic, Dynamic>
的别名是 ArrayXXi
:https://eigen.tuxfamily.org/dox/group__arraytypedefs.html#gab2c3a894f02fb9fdbc3de996c9d02312
Edit 正如用户 ggael 所指出的,如果我们至少知道一个维度,也可以使用 ArrayXi
,即 1。
如果你想要它的副本,那么你可以在一维数组中分配它:
ArrayXi arr_j = arr.row(j);
如果您想保留一行是 1xN
的事实,那么:
Array<int,1,Dynamic> arr_j = arr.row(j);
或(等价地):
auto arr_j = arr.row(j).eval();
最后,如果你想引用原始数据,那么:
auto arr_j = arr.row(j);
或(等价地):
ArrayXXi::RowExpr arr_j = arr.row(j);