如何解决获取 Eigen::vector 的标准偏差
我需要 Eigen 库中向量的标准偏差。我还没有找到。所以我试了一下:
<script type="text/javascript">
let max = 9000;
let progress = {{ $user->points }};
document.querySelector(".fill").setAttribute(
"style","stroke-dashoffset: " + ((100 - progress) / 100) * max);
</script>
但出现错误。
错误:
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())
解决方法
一个 Eigen::VectorXd
is defined as typedef Matrix<double,Dynamic,1> VectorXd;
所以它是一个 Eigen::Matrix
的特殊形式。您正在尝试从向量 ys.mean()
中减去标量 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));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。