如何对 Eigen 中的二维数组的列执行简单的算术运算
How to perform simple arithmetic operations on columns of 2D arrays in Eigen
我是 Eigen 的新手,下面是我的问题的最小示例。
#include <iostream>
#include <Eigen/Dense>
template <typename T>
struct arr_holder
{
explicit arr_holder(Eigen::ArrayBase<T> const &loc)
: local_arr {decltype(local_arr)::Zero(loc.rows(), loc.cols())}
{
do_calc(loc);
}
auto do_calc(Eigen::ArrayBase<T> const &data) -> void
{
auto &&data_col = data.col(0);
auto &&local_col = local_arr.col(0);
std::cout << data_col - local_col << '\n';
}
private:
Eigen::Array<T, Eigen::Dynamic, Eigen::Dynamic> local_arr;
};
int main() {
Eigen::Array<double, 3, 3> data;
data << 1.0, 2.0, 3.0, 2.0, 5.0, 7.0, 2.0, 5.0, 7.0;
auto arr = arr_holder(data);
}
此代码无法使用 Eigen 3.3.4 和 Clang 5.0.1 编译,出现错误
eigen/Eigen/src/Core/AssignEvaluator.h:833:3: error: static_assert failed "YOU_MIXED_MATRICES_OF_DIFFERENT_SIZES"
EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(ActualDstTypeCleaned,Src)
源于 do_calc
中我试图减去列的行。
我的问题是,为什么这行不通?我的(天真)理解会让我相信我可以在局部归零的二维数组和 data
数组之间执行逐元素减法,因为这些列看起来具有相同的形状(通过打印检查out出data_col
和local_col
的行数和列数),类型相同。
我在这里误解了什么,在 class 拥有的二维数组和作为参数传递的二维数组之间执行此类按列操作的正确方法是什么?我怀疑我在滥用 Dynamic
数组?
您正在减去双精度数组和 3x3 数组,这是不允许的。也许你打算写:
Eigen::Array<typename T::Scalar, Eigen::Dynamic, Eigen::Dynamic> local_arr;
我是 Eigen 的新手,下面是我的问题的最小示例。
#include <iostream>
#include <Eigen/Dense>
template <typename T>
struct arr_holder
{
explicit arr_holder(Eigen::ArrayBase<T> const &loc)
: local_arr {decltype(local_arr)::Zero(loc.rows(), loc.cols())}
{
do_calc(loc);
}
auto do_calc(Eigen::ArrayBase<T> const &data) -> void
{
auto &&data_col = data.col(0);
auto &&local_col = local_arr.col(0);
std::cout << data_col - local_col << '\n';
}
private:
Eigen::Array<T, Eigen::Dynamic, Eigen::Dynamic> local_arr;
};
int main() {
Eigen::Array<double, 3, 3> data;
data << 1.0, 2.0, 3.0, 2.0, 5.0, 7.0, 2.0, 5.0, 7.0;
auto arr = arr_holder(data);
}
此代码无法使用 Eigen 3.3.4 和 Clang 5.0.1 编译,出现错误
eigen/Eigen/src/Core/AssignEvaluator.h:833:3: error: static_assert failed "YOU_MIXED_MATRICES_OF_DIFFERENT_SIZES" EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(ActualDstTypeCleaned,Src)
源于 do_calc
中我试图减去列的行。
我的问题是,为什么这行不通?我的(天真)理解会让我相信我可以在局部归零的二维数组和 data
数组之间执行逐元素减法,因为这些列看起来具有相同的形状(通过打印检查out出data_col
和local_col
的行数和列数),类型相同。
我在这里误解了什么,在 class 拥有的二维数组和作为参数传递的二维数组之间执行此类按列操作的正确方法是什么?我怀疑我在滥用 Dynamic
数组?
您正在减去双精度数组和 3x3 数组,这是不允许的。也许你打算写:
Eigen::Array<typename T::Scalar, Eigen::Dynamic, Eigen::Dynamic> local_arr;