我想使用 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 来做到这一点?
顺便说一句:将 numpy 的二维数组与 dtype=object_ 一起使用,而不是 python 列表会更快吗?