【问题标题】:How to have normalize data around the average for the column in MATLAB?如何在 MATLAB 中对列的平均值进行归一化?
【发布时间】:2011-03-24 21:48:31
【问题描述】:

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

【问题讨论】:

  • ...所有的 MATLAB 用户都举手说“哦,哦,我知道这个!”
  • @Doresoom ...太糟糕了,谷歌阅读器在提供提要方面太慢了。

标签: matlab normalize


【解决方案1】:

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

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

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

M = M-mean(M, 1);

【讨论】:

  • 我将如何切换它来做平均行数
  • @Spencer:您只需在对 MEAN 的调用中添加 ,2 即可从每行中减去行均值,如下所示:M = bsxfun(@minus,M,mean(M,2));
  • +1 为 bsxfun (我在一段时间内看到的最奇怪的名字,一个有用的功能!)
  • @Jason S:bsx 代表二进制单例扩展
【解决方案2】:

尝试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);

【讨论】:

    【解决方案3】:

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

    所以试试这个:

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

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

    【讨论】:

      【解决方案4】:
      % Assuming your matrix is in A
      m = mean(A);
      A_norm = A - repmat(m,size(A,1),1)
      

      【讨论】:

      • 嗯,问题显然是要减去平均值。你的答案除以平均值。是的,使用了 normalize 这个词,但它是明确定义的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-27
      • 2011-07-16
      • 1970-01-01
      • 2013-06-19
      相关资源
      最近更新 更多