簡體   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