Eigen C++库中是否有提取向量前N个元素的内置函数?
Eigen中提取向量前N个元素的内置方法
当然有,Eigen库本身就提供了和R语言head()功能完全对应的内置成员函数——head(),专门用来提取向量(或矩阵的行/列)的前N个元素,效率远高于手动循环填充。
具体用法示例:
- 针对Eigen向量类型(如
VectorXd、VectorXi)
#include <Eigen/Dense> using namespace Eigen; int main() { VectorXd y(10); y << 1, 2, 3, 4, 5, 6, 7, 8, 9, 10; // 提取前5个元素,返回一个新的VectorXd VectorXd x = y.head(5); // 此时x的值为 [1,2,3,4,5] return 0; }
- 针对单行/单列矩阵
如果你的"向量"是单行矩阵(RowVectorXd)或单列矩阵(比如MatrixXd的某一列),同样可以用head():
// 单列矩阵示例 MatrixXd mat(10, 1); mat << 1,2,3,4,5,6,7,8,9,10; MatrixXd col_head = mat.col(0).head(5); // 提取第一列前5个元素 // 单行矩阵示例 RowVectorXd row_vec(10); row_vec << 1,2,3,4,5,6,7,8,9,10; RowVectorXd row_head = row_vec.head(5); // 提取前5个元素
效率说明
Eigen的head()基于表达式模板实现,不会产生额外的内存拷贝(除非你显式赋值给新的容器),相比手动循环填充,不仅代码更简洁,运行效率也更高——它直接操作底层内存块,避免了循环的额外开销。
内容的提问来源于stack exchange,提问作者E_1996
相关产品推荐
相关产品推荐

