我正在尝试使用矩阵并将每个单元格中的值标准化为该列的平均值。通过归一化,我的意思是从该列中的平均值中减去每个单元格中的值,即从Column1中的值中减去Column1的平均值...从ColumnN中的值减去ColumnN的平均值。我在Matlab中寻找脚本。谢谢!
答案 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
复制均值以匹配数据维度。