2015-10-05 11 views
11

जबकि कुछ numpy सामान के लिए खोज, मैं) numpy.dot की गोलाई सटीकता (चर्चा कर एक सवाल भर में आया था:Numpy चल बिन्दु राउंडिंग त्रुटियों

Numpy: Difference between dot(a,b) and (a*b).sum()

जब से मैं दो (भिन्न) कंप्यूटर के लिए हो हैसवेल-सीपीयू मेरे डेस्क पर बैठे हैं, जो एफएमएंड सबकुछ प्रदान करना चाहिए, मैंने सोचा कि मैं पहले जवाब में ओफियन द्वारा दिए गए उदाहरण का परीक्षण करूंगा, और मुझे नतीजा हुआ कि मुझे कुछ आश्चर्य हुआ:

अद्यतन/स्थापित करने/लापैक/ब्लास/एटलस/numpy फिक्सिंग, मुझे दोनों मशीनों पर निम्नलिखित मिलता है:

>>> a = np.ones(1000, dtype=np.float128)+1e-14 
>>> (a*a).sum() 
1000.0000000000199999 
>>> np.dot(a,a) 
1000.0000000000199948 

>>> a = np.ones(1000, dtype=np.float64)+1e-14 
>>> (a*a).sum() 
1000.0000000000198 
>>> np.dot(a,a) 
1000.0000000000176 

तो मानक गुणा + sum() np.dot() से अधिक सटीक है। टाइमिट ने हालांकि पुष्टि की कि .dot() संस्करण फ्लोट 64 और फ्लोट 128 दोनों के लिए तेज़ (लेकिन अधिक नहीं) है।

क्या कोई इस के लिए स्पष्टीकरण प्रदान कर सकता है?

संपादित करें: मैंने आकस्मिक रूप से numpy संस्करणों पर जानकारी हटा दी: एक ही परिणाम 1.9.0 और 1.9.3 के साथ पायथन 3.4.0 और 3.4.1 के साथ।

+1

दिलचस्प बात यह है कि मुझे केवल NumPy 1.9.2 पर यह विसंगति मिलती है, न कि NumPy 1.8.2। दोनों ब्लैस + लैपैक (एटलस नहीं) का उपयोग करते हैं। NumPy 1.8.2 के साथ, परिणाम डॉट और योग के समान हैं, समान गोलिंग घटनाओं का सुझाव देते हैं, NumPy 1.9.2 पर, गुणा + sum() अधिक सटीक है। –

+0

देखें http://docs.scipy.org/doc/numpy/release.html#better-numerical-stability-for-sum-in-some-cases –

+1

भी https://github.com/numpy/numpy/pull/3685, जहां 'राशि' में परिवर्तन लागू किया गया था। –

उत्तर

2

ऐसा लगता है कि उन्होंने हाल ही में संख्यात्मक स्थिरता के लिए विशेष Pairwise Summationndarray.sum जोड़ा।

PR 3685 से, इस को प्रभावित करता है:

all add.reduce calls that go over float_add with IS_BINARY_REDUCE true 
so this also improves mean/std/var and anything else that uses sum. 

कोड में परिवर्तन के लिए here देखें।

+0

ए "विभाजित और जीत" एल्गोरिदम। हाँ, यह समझ में आता है, धन्यवाद। –

+0

क्या इसका मतलब यह है कि हम एकीकृत कार्यों की तुलना में मैट्रिस की गणना करने के लिए वैकल्पिक रणनीतियों का उपयोग करने के लिए वास्तव में बेहतर हैं? यह विडंबनापूर्ण होगा, क्योंकि वैज्ञानिक काम को कम करने के लिए नुकीले उद्देश्य हैं। –

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