python - 有没有办法更快地编写这个列表理解?
问题描述
我正在编写一些高性能代码,而我当前的瓶颈(> 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 中,以保持可读性。
解决方案
推荐阅读
- excel - 比较vba中的字符串用于excel的问题
- c# - 一个视图中的多个模型 .NET Core
- sql - 如何在firebird中修改我的sql,添加两个日期,每个日期都来自其他表?
- azure - Azure 文件存储 - 访问策略标识符
- c++ - 查找使用给定行向量和以最大形式排列的二进制矩阵的列向量和
- gradle - 不遵循语义版本控制方案的项目的 Gradle 发布插件
- regex - 如何从换行符中提取文本,后跟 Python 中的一些特定关键字?
- java - 我应该如何更新 RecyclerView 的数据集并从视图持有者通知适配器?
- python - pymssql | 找不到 pymssql.pyx
- javascript - 如何在 php 循环中单击时折叠/展开表格