मैं बहुत से ज्यामितीय गणनाओं के साथ अजगर में कुछ वैज्ञानिक कंप्यूटिंग कर रहा हूं, और मैं उपयोग करने के बीच एक महत्वपूर्ण अंतर के बीच भाग गया numpy
बनाम मानक math
पुस्तकालय।
>>> x = timeit.Timer("v = np.arccos(a)", "import numpy as np; a = 0.6")
>>> x.timeit(100000)
0.15387153439223766
>>> y = timeit.Timer("v = math.acos(a)", "import math; a = 0.6")
>>> y.timeit(100000)
0.012333301827311516
यह लगभग 10x स्पीडअप से अधिक है! मैं लगभग सभी मानक गणित कार्यों के लिए numpy का उपयोग कर रहा हूं, और मैंने यह मान लिया है कि यह अनुकूलित और कम से कम उतना ही तेज है math
। लंबे समय तक पर्याप्त वैक्टर, सुन्न।arccos () अंततः जीत जाएगा। math.acos () के साथ लूपिंग बनाम।, लेकिन चूंकि मैं केवल स्केलर मामले का उपयोग करता हूं, क्या math.acos (), math.asin (), math.atan () का उपयोग करने में कोई नकारात्मक पहलू है सुन्न संस्करणों के बजाय बोर्ड?
उत्तर:
जवाब के लिए 3 № 1से कार्यों का उपयोग करना math
स्केलर के लिए मॉड्यूल पूरी तरह से ठीक है। numpy.arccos
के कारण कार्य धीमा होने की संभावना है
- एक सरणी में रूपांतरण (और एक सी डेटा प्रकार)
- सी फ़ंक्शन कॉल ओवरहेड
- एक अजगर प्रकार पर वापस परिणाम का रूपांतरण
यदि प्रदर्शन में यह अंतर आपकी समस्या के लिए महत्वपूर्ण है, तो आपको यह जांचना चाहिए कि क्या आप वास्तव में सरणी संचालन का उपयोग नहीं कर सकते user2357112 टिप्पणियों में कहा, सरणियाँ क्या हैं numpy
वास्तव में महान है।