2015-10-07 17 views
5

यह अच्छी तरह से ज्ञात है कि संख्याओं को जोड़ने से संख्यात्मक त्रुटियां हो सकती हैं (उदाहरण के लिए, यदि पहली संख्या वास्तव में बड़ी है, जबकि कई अन्य छोटी संख्याएं हैं)।क्या numpy.sum इस तरह से कार्यान्वित किया गया है कि संख्यात्मक त्रुटियों से बचा जाता है?

इसे संख्याओं को सीधे-सीधे रास्ते में जोड़ने का हल किया जा सकता है। उदाहरण के लिए देखें: https://en.wikipedia.org/wiki/Kahan_summation_algorithm

क्या numpy.sum इस तरह कार्यान्वित किया गया है कि संख्यात्मक त्रुटियों से बचा जा सके?

उत्तर

3

numpy kahan पर सर्च कर रहे हैं एक बंद बग/मुद्दे

https://github.com/numpy/numpy/issues/2448 न्यूमेरिकल स्थिर राशि (math.fsum के समान)

मैं विस्तार से नहीं पढ़ा है कर दिया। नोट math.fsum

fsum(iterable) 
Return an accurate floating point sum of values in the iterable. 
Assumes IEEE-754 floating point arithmetic. 
(from the Python math docs) 
Return an accurate floating point sum of values in the iterable. Avoids loss of precision by tracking multiple intermediate partial sums 

के संदर्भ में और एक तो सवाल यह है, कुछ चर्चा के साथ है, लेकिन कोई वास्तविक जवाब:

Is there any documentation of numpy numerical stability?

एक सरल तुलना:

In [320]: x=np.ones(100000)/100000 
In [321]: sum(x)-1 
Out[321]: -1.9162449405030202e-12 
In [322]: np.sum(x)-1 
Out[322]: 1.3322676295501878e-15 
In [323]: math.fsum(x)-1 
Out[323]: 0.0 

संबंधित बार 72 हैं एमएस, 304 μs, 23.8 एमएस

np.sum स्पष्ट रूप से सबसे तेज़ है; लेकिन fsumsum से बेहतर है, संभवतः इसके विशिष्टीकृत सी कार्यान्वयन के कारण।

संबंधित मुद्दे