【发布时间】:2014-05-24 05:44:44
【问题描述】:
我在 Eigen 库 here 中遇到了以下矩阵分配问题
Matrix3f m;
m << 1, 2, 3,
4, 5, 6,
7, 8, 9;
作为无聊的替代方式(m(0,0) = 1; ...等)。我的问题是使用第一种方法我应该注意什么?因为我知道任何简化都是有代价的。
【问题讨论】:
标签: c++ matrix variable-assignment eigen
我在 Eigen 库 here 中遇到了以下矩阵分配问题
Matrix3f m;
m << 1, 2, 3,
4, 5, 6,
7, 8, 9;
作为无聊的替代方式(m(0,0) = 1; ...等)。我的问题是使用第一种方法我应该注意什么?因为我知道任何简化都是有代价的。
【问题讨论】:
标签: c++ matrix variable-assignment eigen
在第一种情况下,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
我猜第二次初始化会慢一些,但除非你手动初始化巨大的矩阵,否则应该不会有什么不同。无论如何,你不能使用逗号初始化循环初始化,所以逗号形式只用于小矩阵(你可以真正手动编写元素)。
【讨论】: