मैं cython का उपयोग कर निम्न कोड में तेजी लाने के लिए चाहते हैं:क्या साइथन ऑब्जेक्ट पुनरावृत्ति की सरणी को गति दे सकता है?
class A(object):
cdef fun(self):
return 3
class B(object):
cdef fun(self):
return 2
def test():
cdef int x, y, i, s = 0
a = [ [A(), B()], [B(), A()]]
for i in xrange(1000):
for x in xrange(2):
for y in xrange(2):
s += a[x][y].fun()
return s
केवल एक चीज है जो मन में आता कुछ इस तरह है:
def test():
cdef int x, y, i, s = 0
types = [ [0, 1], [1, 0]]
data = [[...], [...]]
for i in xrange(1000):
for x in xrange(2):
for y in xrange(2):
if types[x,y] == 0:
s+= A(data[x,y]).fun()
else:
s+= B(data[x,y]).fun()
return s
असल में, सी ++ में समाधान सारणी रखने के लिए किया जाएगा आभासी विधि fun()
के साथ कुछ बेस क्लास के पॉइंटर्स के लिए, तो आप इसे बहुत तेज़ी से पुन: सक्रिय कर सकते हैं। क्या पाइथन/साइथन का उपयोग करने का कोई तरीका है?
बीटीडब्ल्यू: क्या पाइथन सूचियों के बजाय, dtype = object_ के साथ numpy's 2D सरणी का उपयोग करना तेज़ होगा?
2 भीतरी छोरों unrolling प्रयास करें हटाया जा सकता, संख्या, छोटे हैं तो यह भी बहुत कुछ कोड में शामिल नहीं होगा। मुझे लगता है कि एक अच्छा मौका है कि numpy मदद करेगा। –
यह एक उदाहरण है, वास्तविक कोड में एक आकार बड़ा है और केवल रनटाइम – Maxim