【发布时间】:2012-09-08 08:34:22
【问题描述】:
我一直在将一个 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 帮助(numpy.std)中,他们特别提到该算法是:
std = sqrt(mean(abs(x - x.mean())**2))
所以我在 octave 中实现了它并得到了 numpy 给出的确切答案。所以看起来标准偏差函数不同。
但是为什么/如何?哪个是正确的? (如果有这种事)
甚至 prctile/percentile?
以防万一,因为我在 Linux aptosid...
GNU Octave,版本 3.6.2
numpy.版本 '1.6.2rc1'
【问题讨论】: