如何将Eigen Vector/Matrix中的元素转换为原生double类型
错误原因
param.tail(1)返回的是Eigen的1x1行向量块类型,不属于标量类型,无法直接赋值给double类型变量,因此触发类型转换报错。
适配动态大小向量的解决方案
所有方案均不需要预先获知向量尺寸,可兼容运行时动态调整大小的场景:
- 方案1:直接通过索引访问,兼容全版本Eigen
调用size()方法即可获取向量当前的实际元素个数,直接取最后一位索引即可:// 无边界检查版本,性能更高 double last_element = param(param.size() - 1); // 带边界检查版本,越界会抛出异常,安全性更高 double last_element_safe = param.coeff(param.size() - 1); - 方案2:保留tail()用法的适配写法
如果场景需要扩展取尾部连续多个元素,可以对tail返回的块取首个元素即可:double last_element = param.tail(1)(0); // C++11及以上还可以用value()方法语义更清晰 double last_element = param.tail(1).value(); - 方案3:Eigen 3.4及以上版本极简写法
高版本Eigen提供了直接取首尾元素的原生方法,无需手动计算索引:// 直接取最后一个元素,返回值为标量 double last_element = param.last(); // 对应取第一个元素可用first() double first_element = param.first();
内容的提问来源于stack exchange,提问作者lefe
相关产品推荐
相关产品推荐

