![](/img/trans.png)
[英]How pass Eigen matrix row reference (to be treated as a vector) to a func implemented in another .cpp?
[英]How do I pass an Eigen matrix row reference, to be treated as a vector?
我有一個操作Vector引用的函數,例如
void auto_bias(const Eigen::VectorXf& v, Eigen:Ref<Eigen::VectorXf>> out)
{
out = ...
}
在某些時候我需要讓這個功能在Matrix行上運行。 現在,因為默認的內存布局是列主要的,所以我不能只將行指向的數據映射到矢量中。 那么,我該如何將行傳遞給上面的函數以便我可以對它進行操作呢?
不那么漂亮的解決方案是有一個臨時矢量,例如
VectorXf tmpVec = matrix.row(5);
auto_bias(otherVector, tmpVec);
matrix.row(5) = tmpVec;
但有沒有辦法直接這樣做?
您可以修改函數以引用行類型(它是向量表達式)而不是向量。 這實際上只能通過模板來管理,以便為您推斷出這種類型:
#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;
}
您可以允許Ref<>
具有非默認的內部步幅(也稱為增量),如下所示:
Ref<VectorXf, 0, InnerStride<>>
請參閱Ref 文檔的示例函數foo3
。
缺點是即使傳遞真正的VectorXf
也可能導致性能VectorXf
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.