我有一个函数,它要求我传递一个相当大的矩阵(我使用Eigen创建) - 范围从尺寸200x200 - > 1000×1000。这个函数比这个更复杂,但它的基础是:
#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中慢,显然我想加快速度!
最佳,
本
答案 0 :(得分:1)
在您显示的代码中,您要复制1,000,000个元素10,000次。循环中的赋值创建了一个副本。
通常,如果您将特征矩阵传递给另一个函数,则通过引用接受该参数可能是有益的。
从您的代码中可以清楚地了解您尝试实现的目标。