繁体   English   中英

特征:从向量中减去标量

[英]eigen: Subtracting a scalar from a vector

我在使用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')和'浮动')VECTOR_TYPE test = singular_values - scale;

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

最简单的是转移到所谓的“阵列”世界:

VECTOR_TYPE test = singular_values.array() - offset;

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

相反,你应该写

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

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

如果我没有弄错你也可以使用广播操作:

VECTOR_TYPE test = singular_values.rowwise() - offset;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM