加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

eigen源码解析

(2017-04-05 13:25:37)
分类: 计算技术
eigen是强大的开源矩阵库,支持很多典型的矩阵运算,我第一次看到下面的代码时,楞了一下:

int main()
{
MatrixXf m1(3, 4);   //动态矩阵,建立3行4列。  
MatrixXf m2(4, 3);   //4行3列,依此类推。  

m1 = MatrixXf::Zero(3, 4);       //用0矩阵初始化,要指定行列数  
m2 = MatrixXf::Zero(4, 3);

m1 << 1, 0, 0, 1,                      //这是啥东西??????????
1, 5, 0, 1,
0, 0, 9, 1;
}

看了源代码后,我靠,原来是这点小把戏啊,这个家伙居然重载了","运算符。下面是我乱写的代码,看懂了这个代码,也就明白为什么了。

#include  
#include
using namespace std;

class myvector: vector < double >
{
public:
myvector& operator<<(const double d)
{
         vector::clear();
vector::push_back(d);
return *this;
}
myvector& operator,(const double d)
{
vector::push_back(d);
return *this;
}
myvector& operator=(const vector < double > &d)
{
vector::operator = (d);
return *this;
}

};

int main()
{
myvector v;
v << 1, 2, 3, 4, 5, 6, 7;                        // 实现了和eigen库同样的赋值方式!
v = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };        //  两种方法,结果一致,效率可能不一样
}
更多的乱七八糟代码:
#include  
#include
using namespace std;

class myvector: vector < double >
{
public:
myvector& operator<<(const double d)
{
          vector::clear();
vector::push_back(d);
return *this;
}
myvector& operator,(const double d)
{
vector::push_back(d);
return *this;
}
myvector& operator=(const vector < double >  &d)
{
vector::operator = (d);
return *this;
}

};

class matrix :vector< vector <  double >  >
{
public:
matrix(){}
matrix(vector< const vector < double >  >  & a)
{
(*this) = a;
}
matrix& operator=(const vector< vector  < double > > & a)
{
vector< vector < double > > ::operator=(a);
int max = 0;
int i = 0;
for (i = 0; i < a.size(); ++i)
{
if (a[i].size() > max)
max = a[i].size();
}
for (i = 0; i < a.size(); ++i)
{
this->operator[](i).resize(max);
}
return *this;
}
};
int main()
{
myvector v;
v << 1, 2, 3, 4, 5, 6, 7;
v = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

matrix m;//{ { 1, 2 }, { 3, 4 } };
m = { { 1, 2, 3, 5}, { 4, 5, 6 }, { 7, 8, 9 }, {10,11,12} };

return 0;
}

0

阅读 收藏 喜欢 打印举报/Report
前一篇:先验和后验
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有