簡體   English   中英

如何傳遞特征矩陣行參考,將其視為向量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM