如何通过引用使用Eigen :: Matrix

时间:2016-05-19 20:54:34

标签: c++11 matrix eigen

我有一个小问题,但我不知道如何解决它。

让我们开始吧: 我需要使用多线程处理一个大的Eigen矩阵。 每个线程都需要访问矩阵。维度是在程序执行期间指定的,因此我必须在main()中声明它,而不是全局声明。我尝试了不同的解决方我搜索类似“通过引用传递”的东西,但我读到这个方法不适用于Eigen Matrix。 这里有一个小例子。有人能告诉我怎样才能解决这个问题?程序需要很快,所以类似于: - 在文件中保存矩阵,在每个线程中读取文件,在矩阵上工作,将矩阵保存在文件中,从主文件中重新读取文件 - 不是最好的方式,我认为...;)有人知道更好的解决方案吗? 谢谢!

void calc() {
    // work on the Matrix
}

int main() {
    Eigen::Matrix<bool, a, b> Mat;
    // Start some thread(calc);
    cout << Mat;
}

1 个答案:

答案 0 :(得分:0)

Si!特征矩阵可以作为参考传递。

这是一个有效的例子:

#include <iostream>
#include <Eigen/Dense>

void calc(Eigen::MatrixXf& mat) {
    mat = Eigen::MatrixXf::Constant(mat.rows(), mat.cols(), 1.0);
}

int main() {
    Eigen::MatrixXf Mat;
    Mat = Eigen::Matrix4f::Identity();
    std::cout << Mat << std::endl;
    calc(Mat);
    std::cout << Mat << std::endl;
}
  • 输出:

    1 0 0 0    
    0 1 0 0    
    0 0 1 0    
    0 0 0 1
    
    1 1 1 1
    1 1 1 1
    1 1 1 1
    1 1 1 1