c++ - 获取 Eigen::vector 的标准差

标签 c++ eigenvector

我需要 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 就足够了ysEigen::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/

相关文章:

c++ - 将空数组传递给函数、在该函数中输入值并返回值的示例

c++ - 如何使无模式对话框始终位于应用程序的顶部

c++ - 四元数转EulerXYZ,如何区分负四元数和正四元数

center - 2D中的PCA计算原始数据中的中心点

python - 特征分解误差容限

python - 如何像在 MATLAB 中那样将 eig 与 nobalance 选项一起使用?

python - 如何在 Python 中将 DWORD 转换为字符串

c++ - 命名空间范围的构造函数定义是否需要类限定标识符?

computer-vision - 特征脸是从什么生成的?

java - OpenCV/JavaCV 人脸识别 - 非常相似的置信度值