7
我想用用Cython加快下面的代碼: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
基本上,在C++的解決方案將有數組使用虛擬方法fun()
指向某些基類的指針,那麼您可以很快地遍歷它。有沒有辦法使用python/cython做到這一點?
順便說一句:用dtype = object_而不是python列表使用numpy的2D數組會更快嗎?
嘗試展開2個內部循環被移除,數量也少,所以它不會增加太多的代碼。我認爲numpy很有可能會有所幫助。 – 2010-10-21 14:33:43
這只是一個例子,在真實的代碼中,一個大小很大,只有在運行時才知道 – Maxim 2010-10-21 15:08:19