我需要 Eigen 中 vector 的标准差图书馆。我还没找到。所以我尝试了一下:
Eigen::VectorXd ys(5);
ys << 1, 2, 3, 4, 5;
double std_dev = sqrt((ys - ys.mean()).square().sum() / (ys.size() - 1)); // Error with minus sign (ys-ys.mean())
但是出现错误。
错误:
Severity Code Description Project File Line Suppression State
Error (active) E0349 no operator "-" matches these operands
最佳答案
安 Eigen::VectorXd
is defined as typedef Matrix<double, Dynamic, 1> VectorXd;
所以它是 Eigen::Matrix
的特殊形式。您正在尝试减去标量 ys.mean()
来自 vector ys
这是一个系数运算。 Eigen::Matrix
类不打算用于逐系数运算,而是用于线性代数。 对于执行逐系数运算,Eigen 具有 Eigen::Array
class .
因此,转换您的 Eigen::Matrix
就足够了ys
到Eigen::Array
让你的公式发挥作用:
double const std_dev = sqrt((ys.array() - ys.mean()).square().sum() / (ys.size() - 1));
关于c++ - 获取 Eigen::vector 的标准差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67265333/