【问题标题】:C++ function that takes args Eigen sparse matrices采用 args 特征稀疏矩阵的 C++ 函数
【发布时间】:2015-03-26 08:28:29
【问题描述】:

Eigen 库提供/建议了多种在函数中传递密集矩阵的方法,以便它适用于共享相同基数的不同类型,并避免复制(即 Ref,模板表达式)。

但是,我在特征文档或在线文档中都没有找到任何与稀疏矩阵等效的东西。

我基本上有以下问题: 如何编写具有通用接口的函数,以便可以使用可能不同模板参数的 SparseMatrix 或 MappedSparseMatrix 对象调用它,而无需复制?

我已尝试使用派生参数的 SparseMatrixBase 模板表达式,但无法使其工作。

一个简单的示例代码将不胜感激。

【问题讨论】:

  • 在开发分支中,您可以像处理密集对象一样使用Ref<SparseMatrix<...> >Map<SparseMatrix<...> >。这也使得 MappedSparseMatrix 被弃用。
  • 太好了。如果我想支持具有不同模板参数的稀疏矩阵,例如 double/float、row major/col major,情况如何?
  • 然后使用模板函数获取SparseMatrixBase<Derived>
  • 我试过了。但它似乎不适用于 MappedSparseMatrix。可以举个简单的例子吗?

标签: c++ function sparse-matrix eigen


【解决方案1】:

只需编写一个模板函数,取任意SparseMatrixBase<Derived>,例如:

template<typename Derived>
void foo(const SparseMatrixBase<Derived> &a_mat) {
    const Derived &mat(a_mat.derived());
    SparseMatrix<typename Derived::Scalar> tr_mat = mat.transpose();
}

【讨论】:

    猜你喜欢
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 2019-12-16
    • 2023-03-29
    • 2016-10-09
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    相关资源
    最近更新 更多