我正在编写一些高性能代码,而当前的瓶颈(> 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中,以保持可读性。