如何在MATLAB中对列的平均值进行规范化?

时间:2010-08-03 18:51:18

标签: matlab normalize

我正在尝试使用矩阵并将每个单元格中的值标准化为该列的平均值。通过归一化,我的意思是从该列中的平均值中减去每个单元格中的值,即从Column1中的值中减去Column1的平均值...从ColumnN中的值减去ColumnN的平均值。我在Matlab中寻找脚本。谢谢!

4 个答案:

答案 0 :(得分:10)

您可以使用函数mean来获取每列的平均值,然后使用函数bsxfun从每列中减去该值:

M = bsxfun(@minus, M, mean(M, 1));

此外,从版本R2016b开始,您可以利用MATLAB将implicit expansion个操作数执行到算术运算的正确大小这一事实。这意味着您可以简单地执行此操作:

M = M-mean(M, 1);

答案 1 :(得分:3)

尝试启动器的mean功能。将矩阵传递给它将导致所有列被平均并返回行向量。

接下来,您需要减去平均值。要做到这一点,矩阵必须是相同的大小,所以在你的平均行向量上使用repmat。

a=rand(10);
abar=mean(a);
abar=repmat(abar,size(a,1),1);
anorm=a-abar;

或单行:

anorm=a-repmat(mean(a),size(a,1),1);

答案 2 :(得分:1)

% Assuming your matrix is in A
m = mean(A);
A_norm = A - repmat(m,size(A,1),1)

答案 3 :(得分:1)

正如已经指出的那样,你需要mean函数,在没有任何其他参数的情况下调用时,会给出输入中每列的平均值。然后出现轻微的复杂因素,因为你不能简单地减去平均值 - 它的尺寸与原始矩阵不同。

所以试试这个:

a = magic(4)
b = a - repmat(mean(a),[size(a,1) 1]) % subtract columnwise mean from elements in a

repmat复制均值以匹配数据维度。