मेरे पास लॉग फ़ंक्शन (पूर्णांक के लिए), अरबों कॉल के भारी उपयोग के साथ एक गणना परियोजना है। मुझे लगता है कि numpy के लॉग का प्रदर्शन आश्चर्यजनक रूप से धीमा है।numpy के लॉग फ़ंक्शन में क्या होता है? प्रदर्शन में सुधार करने के तरीके हैं?
निम्नलिखित कोड 15 से 17 सेकेंड लगते हैं पूरा करने के लिए:
import numpy as np
import time
t1 = time.time()
for i in range(1,10000000):
np.log(i)
t2 = time.time()
print(t2 - t1)
हालांकि, math.log समारोह 3 से 4 सेकंड से बहुत कम समय लगता है।
import math
import time
t1 = time.time()
for i in range(1,10000000):
math.log(i)
t2 = time.time()
print(t2 - t1)
मैंने मैटलैब और सी # का भी परीक्षण किया, जिसमें क्रमशः 2 सेकंड और केवल 0.3 सेकंड लगते हैं।
matlab
tic
for i = 1:10000000
log(i);
end
toc
सी #
var t = DateTime.Now;
for (int i = 1; i < 10000000; ++i)
Math.Log(i);
Console.WriteLine((DateTime.Now - t).TotalSeconds);
वहाँ अजगर में किसी भी तरह से है कि मैं लॉग समारोह के प्रदर्शन में सुधार कर सकते हैं?
मुझे उत्तर में बहुत दिलचस्पी है। विशेष रूप से क्योंकि मैं अभी स्रोत कोड में गया था, और फ़ंक्शन का पता लगाने में मुश्किल है। इसके बाईं ओर स्रोत कोड टिन करें, यह लिखा गया है: '# वास्तविक हस्ताक्षर अज्ञात; __doc__' से बहाल क्या कोई यह भी समझा सकता है कि स्रोत कोड कैसे काम करता है? –
उत्तर यहां दिखाई देता है http://stackoverflow.com/questions/3650194/are-numpys-math-functions-faster-than-pythons?rq=1 – Bathsheba
'np.log' को सरणी पर काम करने के लिए अनुकूलित किया गया है मान, एकल मूल्य नहीं। उदाहरण के लिए 'np.log (np.arange (1,10000000))' (उस श्रेणी में पूर्णांक की सरणी का लॉग) मेरे लिए लगभग 120ms लेता है। –