私は、matlab/octave プログラムを numpy に書き直していて、結果の値の違いに出くわしました。これは、percentile/prctile 関数と stdard-deviation 関数の両方で発生します。
ナンピーで:
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))
だから私はそれをオクターブで実装し、numpyが与える正確な答えを得ました。そのため、std-deviation 関数が異なるようです。
しかし、なぜ/どのように?そして、どれが正しいですか?(そういうのがあれば)
そして、パーセンタイル/パーセンタイルでさえ?
念のため、私はLinux aptosidにいるので...
GNU Octave、バージョン 3.6.2
うるさい。バージョン「1.6.2rc1」