列式初始化和特征库中标准差的计算

时间:2018-03-10 08:05:00

标签: c++ matlab eigen3

我做了一个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()感到困惑,是否有一个内置函数来使用特征库获得标准偏差?

2 个答案:

答案 0 :(得分:4)

正如余姚指出的那样,Eigen(目前)没有内置标准偏差函数。您可以使用以下内容为单个向量计算此值(通常,如果您在元素操作方面的工作更多,则更喜欢使用Array):

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

如果要计算整个数组的列式std-dev,则以下内容应该有效:

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";

答案 1 :(得分:0)

  

我对使用.colwise()

感到困惑

您可能希望改为使用.col(i)

  

是否有内置函数可以使用特征库获得标准偏差?

不,因为标准偏差函数似乎在此TODO List中列出。