我有一个对向量引用进行操作的函数,例如
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)
但有没有办法直接做到这一点?
您可以修改函数以引用行类型(这是向量表达式)而不是向量。这实际上只能通过模板来管理,以便为您推断该类型:
#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)
| 归档时间: |
|
| 查看次数: |
3651 次 |
| 最近记录: |