我正在對數據進行功能縮放,R和Python在縮放中給出了不同的答案。 R和Python爲許多統計值給出了不同的答案:R和Python給出不同的結果(中位數,IQR,平均值和STD)
中位數: Numpy給出14.948499999999999
與此代碼:np.percentile(X[:, 0], 50, interpolation = 'midpoint')
。 Python中內置的Statistics
包使用以下代碼給出了相同的答案:statistics.median(X[:, 0])
。另一方面,R給出了這個結果14.9632
與此代碼:median(X[, 1])
。有趣的是,R中的summary()
函數的中位數爲14.960。
當計算相同數據的mean
時會發生類似的差異。 R給出13.10936
使用內置的mean()
函數,Numpy和Python Statistics包給出13.097945407088607
。
同樣,計算標準偏差時也會發生同樣的情況。 R給出7.390328
和Numpy(DDOF = 1)給出7.3927612774052083
。 DDOF = 0時,Numpy給出7.3927565984408936
。
IQR也給出了不同的結果。使用R中內置的IQR()
函數,給出的結果是12.3468
。對此代碼使用Numpy:np.percentile(X[:, 0], 75) - np.percentile(X[:, 0], 25)
結果爲12.358700000000002
。
這是怎麼回事?爲什麼Python和R總是給出不同的結果?這可能有助於知道我的數據有795066行,並且在Python中被視爲np.array()
。同樣的數據被視爲在R.
可能的罪魁禍首是數值精度。 R數值存儲爲雙精度,而我懷疑python的默認值是將數字存儲爲float。檢查你的python變量的存儲類型,你可能會發現它們是浮動的。就R中的'summary()'函數而言,我相信默認值是打印四捨五入的數值。你應該可以用'format'參數來改變這個行爲。 – lmo
numpy中的默認浮點類型是'numpy.float64'(即雙精度)。但是如果數組實際上是'numpy.float32'(單精度),那可以解釋這些差異。 @倫敦,什麼是'X.dtype'? –
@WarrenWeckesser X.dtype是float64。希望有所幫助! –