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
这两个例子在官方文档里也有,可以验证计算结果的准确性。