Eigen?中的类跨度型
Span-like type in Eigen?
如果我想创建一个带有Eigen的C++函数,它接受矩阵作为参数,我可以执行以下操作:
void f(const Eigen::MatrixXf& mat) { /*...*/ }
但如果数据不在Eigen::MatrixXf
中,那么我需要创建一个来保存它,并复制其所有权下的(可能很大的(数据。
Eigen是否提供了一个";无所有权";在std::string_view
和std::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
相关文章:
- Eigen如何在容器循环中干净地附加矩阵
- 函数复杂度分析
- 当在带有Eigen的C++中使用GDB时,我如何才能看到更多的大矩阵
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- while循环中while循环的时间复杂度是多少
- 错误处理.将系统错误代码映射到泛型
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 链表的泛型函数remove()与成员函数remove)
- 使用Pybind11向Python公开Eigen::张量
- 如何在没有数据拷贝的情况下从指针创建一个Eigen VectorXd对象
- Eigen:调用lpNorm()的正确方法
- 如何为 C 型字符串数组编写 getter 和 setter?
- C 字符串返回字符串的整数/双精度/长整型值
- 如何调整 std::vector of Eigen::MatrixXd 的大小
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- 函数的时间复杂度是多少?
- 如何检查两个 std::向量在小于 O(n) 的时间复杂度内是否相等
- 如何将 Eigen::Ref 与 pybind11 一起使用?
- Eigen c++ 三角形来自