如何传递特征矩阵行引用以将其视为向量?

Dok*_*ott 5 c++ eigen

我有一个对向量引用进行操作的函数,例如

void auto_bias(const Eigen::VectorXf& v, Eigen:Ref<Eigen::VectorXf>> out)
{
  out = ...
}
Run Code Online (Sandbox Code Playgroud)

在某些时候,我需要让这个函数在矩阵行上运行。现在,因为默认的内存布局是列主的,所以我不能只将行指向的数据映射到向量中。那么,我该如何将行传递到上面的函数中以便我可以对其进行操作呢?

不太漂亮的解决方案是有一个临时向量,例如

VectorXf tmpVec = matrix.row(5);
auto_bias(otherVector, tmpVec);
matrix.row(5) = tmpVec;
Run Code Online (Sandbox Code Playgroud)

但有没有办法直接做到这一点?

rha*_*oto 2

您可以修改函数以引用行类型(这是向量表达式)而不是向量。这实际上只能通过模板来管理,以便为您推断该类型:

#include <iostream>
#include <Eigen/Core>

template<typename V>
void set_row(V&& v) {
   v = Eigen::Vector3f(4.0f, 5.0f, 6.0f);
}

int main() {
   Eigen::Matrix3f m = Eigen::Matrix3f::Identity();
   set_row(m.row(1));

   std::cout << m;
   return 0;
}
Run Code Online (Sandbox Code Playgroud)