以下是 MATLAB 中偏度和峰度的代碼:
clc; clear all
% Generate "N" data points
N = 1:1:2000;
% Set sampling frequency
Fs = 1000;
% Set time step value
dt = 1/Fs;
% Frequency of the signal
f = 5;
% Generate time array
t = N*dt;
% Generate sine wave
y = 10 5*sin(2*pi*f*t);
% Skewness
y_skew = skewness(y);
% Kurtosis
y_kurt = kurtosis(y);
在 MATLAB 中得到的答案是:
y_skew = 4.468686410415491e-15
y_kurt = 1.500000000000001(MATLAB 中的值為正)
現在,以下是 Python 中的代碼:
import numpy as np
from scipy.stats import skew
from scipy.stats import kurtosis
# Generate "N" data points
N = np.linspace(1,2000,2000)
# Set sampling frequency
Fs = 1000
# Set time step value
dt = 1/Fs
# Frequency of the signal
f = 5
# Generate time array
t = N*dt
# Generate sine wave
y = 10 5*np.sin(2*np.pi*f*t);
# Skewness
y_skew = skew(y)
# Kurtosis
y_kurt = kurtosis(y)
在 Python 中得到的答案是:
y_skew = -1.8521564287013977e-16
y_kurt = - 1.5(Python 中的值已被證明為負)
有人可以解釋一下,為什么我們在 MATLAB 和 Python 中對偏度和峰度有不同的答案?
具體來說,在峰態的情況下,該值已從正變為負。有人可以幫助我理解這一點。
uj5u.com熱心網友回復:
這是峰度的 Fisher 和 Pearson 測量之間的差異。
來自MATLAB 檔案:
峰度是對分布的例外傾向程度的度量。正態分布的峰度為 3。比正態分布更容易出現例外值的分布峰度大于 3;不太容易出現例外值的分布的峰度小于 3。一些峰度定義從計算值中減去 3,因此正態分布的峰度為 0。該
kurtosis
函式不使用此約定。
來自scipy 檔案:
峰度是第四個中心矩除以方差的平方。如果使用 Fisher 的定義,則從結果中減去 3.0,得到正態分布的 0.0。
注意在 scipy 中默認使用Fisher的定義
scipy.stats.kurtosis(a, axis=0, fisher=True, ...)
如果您fisher=False
在 Python 中使用(或手動添加 3)或從 MATLAB 結果中減去 3,那么您的結果將是等效的,以便它們都使用相同的定義。
所以看起來標志被翻轉了,但這只是偶然的,因為 1.5 - 3 = -1.5
。
偏度的差異似乎是由于數值精度,因為這兩個結果基本上都是 0。請參閱為什么 24.0000 不等于 MATLAB 中的 24.0000?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/507948.html
標籤:python-3.x matlab 统计数据 偏斜 峰度
上一篇:根據閾值選擇影像分割的像素位置