【问题标题】:Z-score across a whole matrix in MatlabMatlab中整个矩阵的Z分数
【发布时间】:2023-04-01 06:18:01
【问题描述】:

如何在 Matlab 中计算整个 3 维矩阵的 z 分数?

Matlab 命令zscore 仅在多维数组的一个维度中对向量进行标准化。

zscore 文档:https://uk.mathworks.com/help/stats/zscore.html

【问题讨论】:

  • 您可以使用M(:) 将矩阵M 转换为向量。但话又说回来,我不知道 z-score 是什么,您可能想为您正在使用的函数添加简短说明和/或指向 MATLAB 文档的链接。
  • 嗨 Cris,这是一种标准化数据的方法。我认为如果我在 Z 评分之后将向量再次转换回矩阵,那么您的方法可能会奏效。
  • @NeuroPainsme 如果我的回答解决了您的问题,请考虑使用投票按钮下方的勾号将其标记为已接受

标签: matlab matrix multidimensional-array normalization


【解决方案1】:

这里我展示了两种等效的方法:

  1. 您可以edit zscore 查看该函数的工作原理,或者您问题中链接的文档给出了zscore 的公式:

    我们可以使用meanstd(标准差)手动计算。

    M = rand( 3, 5 ) * 10
    >> M =
       9.5929       1.4929       2.5428       9.2926       2.5108
       5.4722       2.5751       8.1428       3.4998       6.1604
       1.3862       8.4072       2.4352        1.966       4.7329
    
    Z = ( M - mean(M(:)) ) / std(M(:)) % using M(:) to operate on the array as a vector
    >> Z =
       1.6598      -1.0771     -0.72235       1.5583     -0.73316
      0.26743     -0.71145       1.1698     -0.39899          0.5
      -1.1131       1.2591      -0.7587     -0.91727     0.017644   
    

    这种方法的好处是你不必使用zscore所需的统计工具箱。这个小缺点是你失去了zscore 的输入检查,如果标准差为 0,则失去保护。

  2. 如果你想使用zscore,那么你可以使用reshape,在计算zscore之后,就像它是一个向量一样:

    Z = reshape( zscore(M(:)), size(M) )
    >> Z =
       1.6598      -1.0771     -0.72235       1.5583     -0.73316    
      0.26743     -0.71145       1.1698     -0.39899          0.5
      -1.1131       1.2591      -0.7587     -0.91727     0.017644   
    

请注意,对于矢量输入M,这两种方法的行为都应与标准zscore(M) 相同。

【讨论】:

    猜你喜欢
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多