我想在Eigen::VectorXd上使用std::partial_sum,但我发现 Eigen 数据结构中根本没有迭代器。是否有一种快速的迭代器包装器,在底层使用经典索引?或者除了重新实现带索引的 partial sum,有什么好方法可以做到这一点?
我想在Eigen::VectorXd上使用std::partial_sum,但我发现 Eigen 数据结构中根本没有迭代器。是否有一种快速的迭代器包装器,在底层使用经典索引?或者除了重新实现带索引的 partial sum,有什么好方法可以做到这一点?
std::partial_sum(array.data(), array.data() + array.rows() * array.cols(), output.data());
虽然Eigen中有2D迭代器可用,但如果您想先迭代一个维度,然后再为每个元素迭代另一个维度,则可以使用它。
这项功能已于2018年10月实现,并将成为3.4版本的一部分。您可以在主干版本中使用它们,例如:
void foo(Eigen::VectorXd& in_out)
{
std::partial_sum(in_out.begin(), in_out.end(), in_out.begin());
}
Godbolt演示(展示与std::vector
近似的代码):https://godbolt.org/z/bFxcCA
如果您对细节感兴趣,请查看此(已合并)拉取请求:https://bitbucket.org/eigen/eigen/pull-requests/519/