3

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

4

4 回答 4

10

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

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

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

M = M-mean(M, 1);
于 2010-08-03T19:01:17.240 回答
3

尝试初学者的均值函数。将矩阵传递给它将导致所有列被平均并返回一个行向量。

接下来,您需要减去平均值。为此,矩阵必须具有相同的大小,因此请在平均行向量上使用 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);
于 2010-08-03T18:55:14.320 回答
1
% Assuming your matrix is in A
m = mean(A);
A_norm = A - repmat(m,size(A,1),1)
于 2010-08-03T19:01:17.647 回答
1

正如已经指出的那样,您将需要该mean函数,该函数在没有任何附加参数的情况下调用时会给出输入中每一列的平均值。然后会出现一个轻微的复杂情况,因为您不能简单地减去平均值——它的维度与原始矩阵不同。

所以试试这个:

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

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

于 2010-08-03T19:03:29.463 回答