c++:将特征定义的矩阵传递给函数,并使用它们 - 最佳实践

c++: passing Eigen-defined matrices to functions, and using them - best practice

本文关键字:最佳 函数 定义 特征 c++      更新时间:2023-10-16

我有一个函数,它要求我传递一个相当大的矩阵(我使用特征创建的) - 范围从尺寸 200x200> 1000x1000。该函数比这更复杂,但它的基本骨架是:

#include <Eigen/Dense>
int main()
{
    MatrixXi mIndices = MatrixXi::Zero(1000,1000);
    MatrixXi* pMatrix = &mIndices;
    MatrixXi mTest;
    for(int i = 0; i < 10000; i++)
     {
           mTest = pMatrix[0];
           // Then do stuff to the copy
     }
}

使用较大尺寸的矩阵运行需要更长的时间是因为当我将数组设置为等于 mTest 时,在 RAM 中查找数组的可用空间需要更长的时间吗?当我切换到稀疏数组时,这似乎要快得多。

如果我需要传递大型矩阵,并且我想最小化矩阵大小对运行时的增量影响,那么这里的最佳实践是什么?目前,同一个程序在 c++ 中的运行速度比在 Matlab 中的运行速度慢,显然我想加快速度!

最好

在您显示的代码中,您正在复制 1,000,000 个元素 10,000 次。循环中的赋值将创建一个副本。

通常,如果要将特征矩阵传递给另一个函数,则通过引用接受参数可能是有益的。

但是,从您的代码中并不清楚您要实现的目标。

相关文章: