Eigen?中的类跨度型

Span-like type in Eigen?

本文关键字:度型 Eigen      更新时间:2024-05-23

如果我想创建一个带有Eigen的C++函数,它接受矩阵作为参数,我可以执行以下操作:

void f(const Eigen::MatrixXf& mat) { /*...*/ }

但如果数据不在Eigen::MatrixXf中,那么我需要创建一个来保存它,并复制其所有权下的(可能很大的(数据。

Eigen是否提供了一个";无所有权";在std::string_viewstd::span的精神下的类似矩阵的引用类型/模板,其将接受Eigen::MatrixXf对象作为自变量,但也将接受压缩的";多维布局";以某种方式原始(甚至任意跨步(浮动数组?

如果是,该类型被称为什么?它是如何使用的?

也许Eigen::Map?但这似乎与其他方法不一样?你能把它用作函数参数吗?怎样或者还有其他类型的?

Eigen::Ref就是您想要的。来自Eigen文档。。。

编写以特征类型为参数的函数

Eigen对表达式模板的使用可能会导致每个表达式都属于不同的类型。如果将这样的表达式传递给采用Matrix类型参数的函数,则表达式将隐式计算为临时矩阵,然后将其传递给该函数。这意味着您将失去表达式模板的优势。。。。【etc】

#include <iostream>
#include <Eigen/SVD>
using namespace Eigen;
using namespace std;
float inv_cond(const Ref<const MatrixXf>& a)
{
const VectorXf sing_vals = a.jacobiSvd().singularValues();
return sing_vals(sing_vals.size()-1) / sing_vals(0);
}

http://eigen.tuxfamily.org/dox-devel/TopicFunctionTakingEigenTypes.html