2015-04-15 85 views
0

我试图用Eigen中的指针初始化矩阵。通常情况下,矩阵数据结构从左到右,从上到下进行初始化。但是,我发现Matrix从上到下,从左到右进行了初始化。问题初始矩阵Eigen用指针

我设定的代码行 std::cout<<matrix<<std::endl 一个破发点,然后我按下一步F5一步,我得到了流动的结果:

1    -6.27744e+066 -6.27744e+066 
2    -6.27744e+066 -6.27744e+066 
-6.27744e+066 -6.27744e+066 -6.27744e+066 

1    2    -6.27744e+066 
2    -6.27744e+066 -6.27744e+066 
1    -6.27744e+066 -6.27744e+066 

1    2    -6.27744e+066 
2    1    -6.27744e+066 
1    2    -6.27744e+066 
... 

最后我得到了

1 2 1 2 
2 1 2 1 
1 2 1 2 

,而不是

1 2 1 2 
1 2 1 2 
1 2 1 2 

我附上原始码f或者你去检查。

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

void function(Eigen::Vector2d* vec) 
{ 
    *vec<<1,2; 
} 

int main(int argc,char* argv[]) 
{ 

    Eigen::Matrix<double,Eigen::Dynamic,Eigen::Dynamic> matrix; 
    matrix.resize(3,4); 
    for(int i=0;i<3;i++) 
     for(int j=0;j<2;j++) 
     { 
     function((Eigen::Vector2d*)matrix.data()+2*i+j); 
     std::cout<<matrix::std::endl; 
     } 

    return 0; 
} 

有人给我说明吗?

+0

嗨,感谢您的回复,恐怕这不是问题所在。无论如何,这不应该是关键,我更新问题让您更好地了解我的问题实际所在。 – hoding1991

回答

0

我想出了自己,*(matrix.data()+i)并不等于*((double*)matrix.data()+i)