matlab自带的normalize函数有时候总抽风不好使:
未定义与 ‘double’ 类型的输入参数相对应的函数 'normalize’
不过考虑到这个东西本身也不难,无非就是这么个公式:Xi−μσ\frac{X_{i}-\mu}{\sigma} σXi−μ 这里特别特别要注意的一点是,matlab里面的这个normalize指的是归一化,将数据调整成标准差为1,中心为0(详见官方文档),但是这种操作在其他地方往往叫做标准化,对应的处理过程是完全不同的,因此需要加以区分。
那么有了这个式子就很好解决了,如果对于简单的向量,直接上公式算就完事了,一个例子如下:
v = 1 : 5;v = (v - mean(v)) / std(v);disp(v);
输出为:
-1.2649 -0.63250 0.6325 1.2649
而如果是二维的话,可以搞个函数:
function [res] = normalize(samples)[M, N] = size(samples);res = zeros(M, N);for i = 1 : Nt = samples( : , i);x = (t - mean(t)) / std(t);res( : , i) = x;endend
B = magic(3);normalize(B);disp(B);
输出为:
1.1339 -1.0000 0.3780-0.7559 0 0.7559-0.3780 1.0000 -1.1339
这两个例子在官方文档里也有,可以验证计算结果的准确性。