c++ - 是否可以从 Eigen 中的 1 开始索引矩阵?

标签 c++ linear-algebra eigen

我正在使用 Eigen 在我的代码中进行一些线性代数计算。然而,所有的数学公式都是基于索引从1开始的事实。所以,每次我想在代码中实现它们时,我都必须检查我在代码中的索引是否与它们一致。我想知道是否可以告诉 Eigen 从 1 而不是 0 开始索引。

最佳答案

Eigen 中的索引操作除了使用整数进行索引外,还允许使用符号索引进行索引。您应该能够实现自己的自定义 symbolic index , 源自 Eigen::symbolic::BaseExpr ,它可以用作基于 1 的索引 API,其中它的 eval_impl 方法只是从它的 arg 中减去 1。例如:

template<typename Arg0>
class MyIndexExpr : public BaseExpr<MyIndexExpr<Arg0> >
{
public:
  MyIndexExpr(const Arg0& arg0) : m_arg0(arg0) {}

  template<typename T>
  Index eval_impl(const T& values) const { return m_arg0.eval_impl(values) - 1; }
protected:
  Arg0 m_arg0;
};

然而,在产品代码中使用它很可能是一个非常糟糕的主意,可能会导致混淆、可能的错误以及任何索引的额外非动机运行时开销。当您使用 C++ 编码时,您可能希望坚持其从零开始的索引实践。也许您可以考虑在为您的公式编写测试时使用符号索引,但为您的产品代码使用基于零的整数索引。

关于c++ - 是否可以从 Eigen 中的 1 开始索引矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56097885/

相关文章:

c++ - Eigen 和 c++11 赋值和引用

visual-c++ - 从特征库检查向量/矩阵中的变量

c++ - 是否保证始终调用 boost::asio 中的 async_* 处理程序?

c++ - Rcpp 相当于 rowsum

c++ - QSpinBox 和 QDoubleSpinBox 不在 valueChanged 上调用方法

c++ - 使用 boost 求解(密集)线性系统 Ax=b

python - 在没有循环的 3D 数组中沿第三轴计算 2D 数组的逆

python - 将线段拟合到一组点

C++ fread : unsigned char and short mixture

c++ - 如何正确读取/发送数据包?