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。

推薦閱讀: