繁体   English   中英

如何在python 3中使用函数调用来加速嵌套的for循环?

[英]How to speed up nested for loops with function call in python 3?

我一直在尝试使用Pygame为python 3创建3D图形库。 我想使用Z-Buffer,所以我需要为每个应该绘制的像素调用函数。 问题是绘制100x100像素矩形需要1毫秒以上的时间。 矩形的绘制函数是带有函数调用的嵌套循环,可以将其简化为以下代码以显示最大的瓶颈:

def another_function():
    pass

def test_function():
    for j in range(100):
        for k in range(100):
            another_function()

不执行任何操作的函数another_function()总计被调用10000次。 当我测量执行时间时,timeit显示test_function()花费1.09毫秒。 这太长了,因为必须绘制多个矩形并达到每秒60帧的速度,一帧的时间必须少于17毫秒。

我尝试搜索解决方案,但除了使用PyPy和Cython之外,我无法找到任何方法来通过函数调用提高嵌套循环的速度。

附加信息:我正在将Python 3.5.2和Windows 10 64位作为操作系统使用。 我没有找到适用于Windows的PyPy的任何安装程序,并且Cython在编译转换为.c的模块时遇到问题,因此我无法使用它。

这取决于您对another_function()所做的实际操作。 如果可以使用一些numpy 广播 ,则可以实现C速度。 事实上,即使在蟒蛇3.6的最新改进, for循环仍然以避免性能的原因。

例如,请参见此答案 正确使用numpy可以使循环的性能提高900倍。

另外,您没有提到它,但是可以使用numba及其即时编译器。 这在纯python循环的情况下特别适合。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM