c++:将特征定义的矩阵传递给函数,并使用它们 - 最佳实践
c++: passing Eigen-defined matrices to functions, and using them - best practice
我有一个函数,它要求我传递一个相当大的矩阵(我使用特征创建的) - 范围从尺寸 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 次。循环中的赋值将创建一个副本。
通常,如果要将特征矩阵传递给另一个函数,则通过引用接受参数可能是有益的。
但是,从您的代码中并不清楚您要实现的目标。
相关文章:
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 复制包含C++所有元素的对象!(构造函数和赋值,最佳实践?
- C++:将向量传递到构造函数以创建成员变量的最佳方法?
- C++ 将函数指针与最佳性能相结合
- 在指向现有内存地址的 hpp 文件中声明成员函数的最佳方法
- std::使用类成员函数创建线程 - 最佳实践
- 将(临时的?)std::string传递给使用它来构造一个接受副本的对象的函数的最佳方法是什么?
- 在 c++ 或 python 中生成一个体面的视差图以在 Raspberry Pi 上实现的最佳方法(算法或函数)是什么
- 将uint8_t*buffer和size_tbufferlen从C++传递到C中的API函数的最佳方式是什么
- 从类中的对象调用类中的函数的最佳方法
- 这是使用构造函数初始化数组对象的最佳方法吗?
- 最佳做法:在函数中频繁使用大时态缓冲区 (C++)
- 在 c++ 中抽象两个略有不同的函数的最佳方法是什么?
- C++最佳实践:接受uint8_t、uint16_t、uint32_t、浮点数的函数
- 使用 emplace_back 避免移动构造函数调用的最佳方法?
- 调用不属于基类的派生类函数的最佳方法是什么?
- C++最佳实践 - 函数类型别名 std::function<T> 或 T
- C++ std::string 中是否有任何函数可以计算两个字符串的相同起始字符的总数或任何最佳方法
- 从C 中的函数中动态分配的缓冲区返回的最佳模式是什么?
- 在函数中使用 const 引用参数访问函数中成员的最佳实践 C++.