Python計算標準差之numpy.std和torch.std的區別
輸入:
[1.0000, -1.0000, 3.0000]
課本中的標準差計算公式:
按照上述公式計算:
Numpy中的std計算:
import numpy as np tm = np.array([1.0000, -1.0000, 3.0000]) ddd = np.std(tm) print(ddd)
1.632993161855452
可以看出Numpy中的計算結果與課本中的公式計算出來的結果是一致的。
Torch中的std計算:
tm = torch.tensor([1.0000, -1.0000, 3.0000]) ddd = torch.std(tm) print(ddd)
tensor(2.)
計算出來的結果是2,與Numpy中的計算結果是不相同的。
查看torch.std的參數:
torch.std默認設置瞭unbiased=True。此時計算標準差的公式則使用貝塞爾校正 的方法:
可以看出貝塞爾校正的標準差最後除以n – 1。
可以看出確實計算出來的結果是2.
至於為何使用n-1,這裡不做過多介紹,建議參考:貝塞爾校正。
附:貝塞爾校正
貝塞爾校正,指的是樣本方差前面的系數1/n-1
這就是這個系數的原理
註:設置torch.std中的unbiased=False,則與Numpy中的std的結果相同的。
總結:
Numpy中的std計算與課本中的計算方式相同,都是除的是樣本數量n。
Torch中的std計算默認使用的是unbiased=True即貝塞爾校正,除的是樣本數量n-1。
推薦閱讀:
- 解決numpy和torch數據類型轉化的問題
- pytorch教程之Tensor的值及操作使用學習
- Pytorch數據類型與轉換(torch.tensor,torch.FloatTensor)
- Python深度學習之Pytorch初步使用
- Pytorch中torch.stack()函數的深入解析