c++ - 获取 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
解决方案
AnEigen::VectorXd
被定义为typedef Matrix<double, Dynamic, 1> VectorXd;
它是 an 的一种特殊形式Eigen::Matrix
。您正试图ys.mean()
从一个向量中减去一个标量,ys
这是一个系数操作。该类Eigen::Matrix
不适用于系数运算,而是用于线性代数。 为了执行系数操作,Eigen 具有Eigen::Array
类.
因此,将您的公式转换为公式就足够了Eigen::Matrix
ys
Eigen::Array
:
double const std_dev = sqrt((ys.array() - ys.mean()).square().sum() / (ys.size() - 1));
推荐阅读
- javascript - 指令“script-src”中的不安全 CSP 值“'unsafe-eval'”
- git - Git 以及如何保留我的预览分支但用另一个分支完全覆盖
- python - 熊猫:Groupby总和值
- tensorflow - 从 anaconda 提示符启动 jupyter notebook 的问题
- android - 如何从 Firebase 数据库 Kotlin 中检索特定数据?
- pandas - 如何根据熊猫中另一列中的值替换NAN值
- c++ - 如何在 atom 文本编辑器中运行 graphics.h 头文件?
- tensorflow - 在深度学习中结合训练和推理的重要性
- android-studio - 如何解决我在 Eclipse IDE 中安装的 Android 的问题?
- ios - Target 覆盖 Xcode 12.5 和 Swift 5 中的“ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES”构建设置警告