我不清楚如何编译Eigen的块,这可能是相关的,例如在for循环中。 作为一个具体的例子,
之间会有什么区别Eigen::VectorXd x(3*N);
Eigen::VectorXd y(3*N);
Eigen::VectorXd z(N);
for (int i=0; i<N; ++i)
{
z[i] = x.block<3,1>(3*i).dot(y.block<3,1>(3*i));
}
和
std::vector<Eigen::Vector3d> x(N);
std::vector<Eigen::Vector3d> y(N);
std::vector<double> z(N);
for (int i=0; i<N; ++i)
{
z[i] = x[i].dot(y[i]);
}
第一次会在每次迭代时创建对各个块的引用,还是会将其编译为与向量元素访问大致相同?