python - 不显式执行繁重计算任务的 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 是否有任何性能优势?
解决方案
推荐阅读
- python - Django 表单的 clean 方法不会引发 ValidationError,而是使 is_valid() 函数返回 False
- php - 从数据库中获取行,但在我想要的地方打印每一行
- php - 如何将表单的输入添加到 url?
- fluentvalidation - FluentValidation 未正确验证电子邮件地址列表?
- asp.net-core - asp.net core 2.2 brotli 压缩在 IIS 上不起作用?
- codeigniter - Codeigniter:当前未加载数据库驱动程序
- php - symfony 4 通过服务器在 dev 中运行时显示 500 错误“某事已损坏”:运行
- c++ - 如何获得对变体值的引用?
- postgresql - Postgres:删除外键约束查询卡住
- jquery - 在 ASP.NET 中使用 JQuery 删除 INPUT TAG 中的垂直对齐