eigen:从向量中减去标量

新手上路,请多包涵

使用 Eigen 库时出现错误,我要做的就是从 Eigen::VectorXf 中减去一个标量。所以,我的代码如下:

 #define VECTOR_TYPE Eigen::VectorXf
#define MATRIX_TYPE Eigen::MatrixXf

// myMat is of MATRIX_TYPE
JacobiSVD<MATRIX_TYPE> jacobi_svd(myMat,ComputeThinU | ComputeThinV);

const float offset = 3.0f;
VECTOR_TYPE singular_values = jacobi_svd.singularValues();

VECTOR_TYPE test = singular_values - offset;

最后一行导致编译错误:

错误:二进制表达式的无效操作数(’Eigen::VectorXf’(又名’Matrix’)和’float’)VECTOR_TYPE测试=奇异值-比例;

Eigen/src/Core/../plugins/CommonCwiseBinaryOps.h:19:28:注意:候选模板被忽略:无法将“MatrixBase”与“float”匹配 EIGEN_MAKE_CWISE_BINARY_OP(operator-,internal::scalar_difference_op)

原文由 Luca 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

最简单的是移动到所谓的 “数组” 世界:

 VECTOR_TYPE test = singular_values.array() - offset;

原文由 ggael 发布,翻译遵循 CC BY-SA 3.0 许可协议

从向量中减去标量(只是一维向量)在数学上是无效的,因此 Eigen 正确地抛出了错误。

相反,你应该写

auto n = singular_values.size();
VECTOR_TYPE test = singular_values - offset * VECTOR_TYPE::Ones(n);

此外,您可以查看提供逐元素转换的 array() 功能。

原文由 davidhigh 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题