持有多个特征矩阵Xd的最有效方式
Most efficient way to hold several Eigen MatrixXd
我需要将数据存储在类似 3D 的结构中,但是我一直依靠 Eigen 库来处理代码中的矩阵结构,而 Eigen 不提供 3D 矩阵。我找到了两种可能的解决方法:
int x,y,z;
Eigen::Matrix<Eigen::Matrix<double,Dynamic,Dynamic>, Dynamic,1> M(z);
for (int i = 0; i < M.rows(); ++i) M(i)=MatrixXd::Zero(x,y);
// access coefficients with M(z)(x,y)
和
int x,y,z;
std::vector<Eigen::Matrix<double,Dynamic,Dynamic> > M(z);
for (int i = 0; i < M.rows(); ++i) M[i]=MatrixXd::Zero(x,y);
// access coefficients with M[z](x,y)
我的问题是:使用这两种方法是否有任何速度/效率优势,或者它们是等效的?
试试这段代码:
#include<windows.h>
LARGE_INTEGER startTime, stopTime;
LARGE_INTEGER freq;
int main(int argc, char *argv[])
{
QueryPerformanceFrequency(&freq);
// ACCESS TIME 1
QueryPerformanceCounter(&startTime);
int x1,y1,z1;
Eigen::Matrix<Eigen::Matrix<double,Dynamic,Dynamic>, Dynamic,1> M1(z1);
for (int i = 0; i < M1.rows(); ++i) M1(i)=MatrixXd::Zero(x1,y1);
QueryPerformanceCounter(&stopTime);
double msecs1= (double)(stopTime.QuadPart - startTime.QuadPart) / (double)freq.QuadPart;
// ACCESS TIME 2
QueryPerformanceCounter(&startTime);
int x2,y2,z2;
std::vector<Eigen::Matrix<double,Dynamic,Dynamic> > M2(z2);
for (int i = 0; i < M2.rows(); ++i) M2[i]=MatrixXd::Zero(x2,y2);
QueryPerformanceCounter(&stopTime);
double msecs2= (double)(stopTime.QuadPart - startTime.QuadPart) / (double)freq.QuadPart;
// RESULT
cout<<"t1="<<msecs1<<", t2="<<msecs2;
}
相关文章:
- 欧拉项目#8答案是大以获得有效答案
- 调整大小后指向元素值的指针unordered_map有效?
- 为什么是0;C++中的有效语句
- 最高有效数字侧的第N位
- GCC对可能有效的代码抛出init list生存期警告
- 有效地使用std::unordered_map来插入或增加键的值
- c++中O(n^(1/3))中一个数的除数的有效计数
- 使用无符号字符数组有效存储内存
- 自定义先决条件对移动分配运算符有效吗
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- 有哪些有效的方法可以消除一组 100 万个字符串>重复数据?
- 为什么这种直接初始化有效?(C++17)
- 递归函数有效,但无法记忆
- 在C++中初始化向量映射的最有效方法
- 如果变量名称不跟在 char* 后面,const char* 是否有效?
- 钳制迭代器是否有效
- 如何有效地在 std::vector 中插入一对?
- C++模板 t 不是有效的模板类型
- 检查由括号、方括号和大括号组成的一组方括号是否有效?
- 持有多个特征矩阵Xd的最有效方式