我决定在我的项目中使用Eigen库.但是从文档中不清楚如何最有效地指定3d矢量数组.
正如我所说,第一种方式是
Eigen::Matrix<Eigen::Vector3d, Eigen::Dynamic, 1> array_of_v3d(size);
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,我应该如何得到另一个数组哪些元素等于元素的标量积array_of_v3d和其他一些实例Vector3d?换句话说,我可以使用Eigen函数重写以下循环:
Eigen::Vector3d v3d(0.5, 0.5, 0.5);
Eigen::VectorXd other_array(size);
for (size_t i = 0; i < size; ++i)
other_array(i) = array_of_v3d(i).dot(v3d);
Run Code Online (Sandbox Code Playgroud)
第二种方法是使用尺寸为(3 x size)或的矩阵(size x 3).例如,我可以这样声明:
Eigen::Matrix<double, 3, Eigen::Dynamic> matrix;
Run Code Online (Sandbox Code Playgroud)
但我没有从文档中获得如何设置列数.以下似乎工作,但我必须重复3两次行数:
Eigen::Matrix<double, 3, Eigen::Dynamic> matrix(3, size);
Run Code Online (Sandbox Code Playgroud)
然后上面的循环相当于
other_array = v3d.transpose() * array_of_v3d;
Run Code Online (Sandbox Code Playgroud)
正如我的实验表明这要快一点
Eigen::Matrix<double, Eigen::Dynamic, 3> matrix(size, 3);
other_array = array_of_v3d * v3d;
Run Code Online (Sandbox Code Playgroud)
此外:
无论如何,我的使用Eigen似乎不是那么优化,因为普通的相同程序C几乎快了1.5倍(事实并非如此,它取决于size):
for …Run Code Online (Sandbox Code Playgroud)