小编Ole*_*yan的帖子

实现3d向量数组的最佳方法是什么?

我决定在我的项目中使用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)

c++ linear-algebra eigen

9
推荐指数
1
解决办法
4173
查看次数

标签 统计

c++ ×1

eigen ×1

linear-algebra ×1