在Matlab

时间:2015-09-09 12:00:26

标签: matlab inverse

在Matlab R2014a中我有信心使用 zscore(x)功能

function [z,mu,sigma] = zscore(x,flag,dim)
if isequal(x,[]), z = []; return; end

if nargin < 2
    flag = 0;
end
if nargin < 3
    % Figure out which dimension to work along.
    dim = find(size(x) ~= 1, 1);
    if isempty(dim), dim = 1; end
end

% Compute X's mean and sd, and standardize it
mu = mean(x,dim);
sigma = std(x,flag,dim);
sigma0 = sigma;
sigma0(sigma0==0) = 1;
z = bsxfun(@minus,x, mu);
z = bsxfun(@rdivide, z, sigma0); 

其中x是时间序列的数组(1x12 double)。 z的公式基本上是: z =(x - mean)/ stdDev 假设x最初设置为:

  

x =    第1列至第5列&gt;    40.466666670000002 43.538461540000000 40.466666670000002 41.846153850000000 46.266666669999999    第6至10列&gt;    68.000000000000000 87.200000000000003 42.933333330000004 41.071428570000002 41.428571429999998    第11至12列>&gt;    83.200000000000003 96.076923080000000

我跑完后

x=zscore(x);

如下所示:

  

x =    第1列至第5列&gt;    -0.730346157143482 -0.586298957286754 -0.730346157143482 -0.665657180852154 -0.458363881462091    第6至10列&gt;     0.560788093923360 1.461143213420378 -0.614675534465169 -0.701986757521516 -0.685239080313558    第11至12列>&gt;     1.273569230191833 1.877413168652630

我需要应用它的反函数。我应该如何在Matlab上实现代码。

1 个答案:

答案 0 :(得分:1)

要计算逆,您需要知道原始x的平均值和标准差,因为有很多输入值可能导致相同的z得分。我认为你已经意识到z分数的均值和标准偏差总是分别为0和1,因为z分数的定义并没有给出有用的信息。

如果您知道原始均值和标准差。您可以将原始x简单地计算为 x = std(x)* z + mean(x)。但是,如果不这样做,问题就没有明确定义,也无法解决。

例如,如果您为所有原始数据添加100,则z分数不变。没有办法区分哪个x值仅与z得分正确。如果将原始数据乘以常数,则相同。