gpt4 book ai didi

c++ - 特征库中标准差的列初始化和计算

转载 作者:搜寻专家 更新时间:2023-10-31 00:53:19 26 4
gpt4 key购买 nike

我做了一个 MATLAB 代码,我正在尝试使用 Eigen 库在 C++ 中完成它。在我的 MATLAB 代码中,我必须像这样执行一个特定的函数

M=10;
s1 = zeros(20,M);
for i=1:M
s1(:,i) = i*i;%some function
s1(:,i) = s1(:,i)/std(s1(:,i));
end

我对使用 .colwise() 感到困惑,是否有内置函数可以使用 Eigen 库获取标准差?

最佳答案

正如 Yuyao 指出的那样,Eigen 中没有内置标准差函数(目前)。您可以使用以下方法为单个 vector 计算此值(通常,如果您更多地从事逐元素操作,则更喜欢使用 Array):

Eigen::ArrayXd vec;
double std_dev = std::sqrt((vec - vec.mean()).square().sum()/(vec.size()-1));

(因为有一个编辑请求:请注意,为了对标准偏差进行无偏估计,您需要除以 vec.size()-1:[1])

如果你想计算整个数组的列标准偏差,下面的方法应该可行:

Eigen::Index N = 20, M = 10;
Eigen::ArrayXd angles = Eigen::ArrayXd::LinSpaced(N, -M_PI/2, M_PI/2);

Eigen::ArrayXXd s1(N, M);
for(Eigen::Index i=0; i< s1.cols(); ++i)
{
s1.col(i) = (i+1)*sin(angles+i);
}

Eigen::Array<double, 1, Eigen::Dynamic> std_dev = ((s1.rowwise() - s1.colwise().mean()).square().colwise().sum()/(M-1)).sqrt();
std::cout << std_dev << "\n\n";

s1.rowwise() /= std_dev;

std::cout << s1 << "\n\n";

关于c++ - 特征库中标准差的列初始化和计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49206780/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com