我将一份Matlab/Octave程序改写成了Numpy,发现了一些结果值的差异。这种情况出现在百分位数/percentile和标准差函数/stdard-deviation functions中。
Numpy中:
import matplotlib.mlab as ml
import numpy
>>> t = numpy.linspace(0,100, 100)
>>> numpy.percentile(t,95)
95.0
>>> numpy.std(t)
29.157646512850626
>>> ml.prctile(t,95)
95.000000000000014
在Octave中:
octave:1> t = linspace(0,100,100)';
octave:2> prctile(t,95)
ans = 95.454545
octave:3> std(t)
ans = 29.304537
虽然数组't'的值相同,但结果比我预期的更加不同。
在numpy的帮助文档(numpy.std)中,他们特别提到算法是:
std = sqrt(mean(abs(x - x.mean())**2))
所以我在Octave中实现了这个功能,并得到了与numpy完全相同的答案。因此,标准差函数似乎有所不同。
但是为什么/如何?哪个是正确的?(如果有这样的东西)
而且prctile/percentile呢?
以防万一,因为我在Linux aptosid中...
GNU Octave,版本3.6.2
numpy.version '1.6.2rc1'