Здесь я показываю два эквивалентных метода:
Вы можете 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
.