如何在Matlab中计算整个三维矩阵的z得分?
Matlab命令zscore
在多维数组的一个维度中跨矢量标准化。
这里我展示了两种等效的方法:
edit zscore
查看函数的工作原理,或者您的问题中链接的文档给出了zscore
的等式:
我们可以使用mean
和std
(标准偏差)手动计算。
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则保护。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
请注意,对于矢量输入zscore(M)
,这两种方法的行为应与标准M
相同。