matlab 手工实现normalize函数 未定义与 ‘double‘ 类型的输入参数相对应的函数 ‘normalize‘

  • Post author:
  • Post category:其他


matlab自带的normalize函数有时候总抽风不好使:

在这里插入图片描述


未定义与 ‘double’ 类型的输入参数相对应的函数 ‘normalize’

不过考虑到这个东西本身也不难,无非就是这么个公式:




X

i

μ

σ

\frac{X_{i}-\mu}{\sigma}

















σ















X











i


























μ
























这里特别特别要注意的一点是,matlab里面的这个normalize指的是

归一化

,将数据调整成标准差为1,中心为0(详见

官方文档

),但是这种操作在其他地方往往叫做

标准化

,对应的处理过程是完全不同的,因此需要加以区分。

那么有了这个式子就很好解决了,如果对于简单的向量,直接上公式算就完事了,一个例子如下:

v = 1 : 5;
v = (v - mean(v)) / std(v);
disp(v);

输出为:

-1.2649   -0.6325	0    0.6325    1.2649

而如果是二维的话,可以搞个函数:

function [res] = normalize(samples)
    [M, N] = size(samples);
    res = zeros(M, N);
    for i = 1 : N
        t = samples( : , i);
        x = (t - mean(t)) / std(t);
        res( : , i) = x;
    end
end
B = magic(3);
normalize(B);
disp(B);

输出为:

    1.1339   -1.0000    0.3780
   -0.7559         0    0.7559
   -0.3780    1.0000   -1.1339

这两个例子在官方文档里也有,可以验证计算结果的准确性。



版权声明:本文为qq_40714949原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。