首页 > 解决方案 > 获取 Eigen::vector 的标准差

问题描述

我需要在Eigen库中有一个向量的标准偏差。我还没有找到它。所以我试了一下:

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  

标签: c++eigenvector

解决方案


AnEigen::VectorXd被定义为typedef Matrix<double, Dynamic, 1> VectorXd;它是 an 的一种特殊形式Eigen::Matrix。您正试图ys.mean()从一个向量中减去一个标量,ys这是一个系数操作。该类Eigen::Matrix不适用于系数运算,而是用于线性代数。 为了执行系数操作,Eigen 具有Eigen::Array.

因此,将您的公式转换为公式就足够Eigen::Matrix ysEigen::Array

double const std_dev = sqrt((ys.array() - ys.mean()).square().sum() / (ys.size() - 1));

推荐阅读