我在特征库here
中遇到了以下的矩阵分配Matrix3f m;
m << 1, 2, 3,
4, 5, 6,
7, 8, 9;
作为无聊的替代方式(m(0,0) = 1;
......等)。我的问题是我应该注意使用第一种方法吗?因为我知道任何简化都需要付出代价。
答案 0 :(得分:6)
在第一种情况下,m(0,0)=1
调用operator(Index, Index)
和operator=(const Scalar& s)
,这可能非常快。 m << 1,2, ...
调用重载的operator<<
和重载的逗号operator,(const Scalar& s)
链,请参阅此处的代码:http://eigen.tuxfamily.org/dox/CommaInitializer_8h_source.html
我猜第二次初始化有点慢,但除非你手工初始化大型矩阵,否则它应该没什么区别。在任何情况下,您都不能使用逗号初始化来循环初始化,因此逗号形式仅用于小矩阵(您可以手动编写元素)。