首页 > 解决方案 > 有没有办法更快地编写这个列表理解?

问题描述

我正在编写一些高性能代码,而我当前的瓶颈(> 50% 运行时间)是围绕创建一个尽可能快地适合某些参数的列表。目前,我正在使用列表理解来执行此操作,但我想知道是否有更优化的方法。

这是在python3.6中。我已经有一个在 cython 中运行的代码子集和一个在 numba jit 中运行的代码子集。这是我的 python 代码和这些编译代码之间的接口。然后将创建的列表传递给 cython 和 numba 函数以进行繁重的数学运算。我已经尝试不包括列表理解中的约束(例如max_x > bead.x > min_x)。但是,这会使列表变得如此之大,以至于降低了程序的整体速度。额外细节:max_,珠子。和 min_ 变量都是浮点数,染色体中有大约 600 个完整的珠子。一旦列表被创建并用作 cython 函数的输入,它就不再被使用,并且在下一次调用这部分代码时会创建一个新的 f 列表(具有不同的 max_ 和 min_ 值)。为了清楚起见, self.chromosome 是染色体对象的列表,可以通过迭代获得珠子对象。珠子对象具有创建列表所需的相关参数。

for chromosome in self.chromosomes: 
            if chromosome != move.chromosome:
                f = [[bead.x, bead.y, bead.z, bead.radius] for bead in 
                      chromosome if max_x > bead.x > min_x and max_y > 
                      bead.y > min_y and max_z > bead.z > min_z]
# do cython stuff with f

如果有关于如何加快这个列表制作的任何想法,那就太棒了。我想尽量避免将过多的代码推送到 cython 中,以保持可读性。

标签: pythonpython-3.xperformancelist-comprehension

解决方案


推荐阅读