我一直在将 matlab/octave 程序重写为 numpy 并遇到了一些结果值的差异。百分位数/百分比和标准偏差函数都会发生这种情况。
在 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:1> t = linspace(0,100,100)';
octave:2> prctile(t,95)
ans = 95.454545
octave:3> std(t)
ans = 29.304537
尽管 't' 的数组值相同,但结果比我想象的要大得多。
在 numpy help(numpy.std) 他们特别提到该算法是:
std = sqrt(mean(abs(x - x.mean())**2))
所以我在 octave 中实现了它并得到了 numpy 给出的确切答案。所以看起来标准偏差函数不同。
但是为什么/如何?哪个是正确的?(如果有这样的事情)
甚至是分位数/百分位数?
以防万一,因为我在 Linux aptosid 中......
GNU Octave,版本 3.6.2
麻木的。版本“1.6.2rc1”