首页 > 解决方案 > 不显式执行繁重计算任务的 cythonizing 类的优点

问题描述

我有一个父类将框对象与数据缓冲区对象配对。盒子对象将数据的位置存储在逻辑空间中,数据对象将实际数据存储在缓冲区中,并公开一个.getData()返回对象的方法,该对象提供.__get__item().__set__item()。这允许使用连接的slice()对象在任意数量的维度上执行操作。骨架父类是

class preFAB():
   def __init__(self, box: Box, offsets: list):
      self._box=box
      self._data=None # this is overridden by the child class
      self._offsets=offsets

   def getData(): # this is overridden by the child class
      pass 

# example of computationally intensive method
   def plus(self, x: preFAB):
      b=self._box.Intersection(x._box)
      data=self.getData()
      srcData=x.getData()
      SliceDest=tuple(slice(b.LoEnd()[dir] - self._offsets[dir], b.HiEnd()[dir] - 
                      self.offsets[dir] + 1) 
                        for dir in range(b.dimension)) 
      SliceSrc=tuple(slice(b.LoEnd()[dir] - x._offsets[dir], b.HiEnd()[dir] - 
                     x.offsets[dir] + 1) 
                        for dir in range(b.dimension))
            
            
      data[SliceDest] += srcData[SliceSrc]

鉴于.getData()通常返回 numpy 或 cupy,对父类进行 cythonize 是否有任何性能优势?

标签: pythonperformancecython

解决方案


推荐阅读