array3d和array2d之间的荒谬性能差异

时间:2018-09-26 21:52:27

标签: arrays python-3.x performance numpy pygame

使用pygame.surfarray将图像控制为数组,对array3d中任何元素的操作要比处理array2d 5倍以上元素。

查看此基准:

from datetime import *
import pygame

image = pygame.image.load('8000x8000.png')
arr = pygame.surfarray.array3d(image)

start = datetime.now()
for y in range(8000):
    for x in range(8000):
        if arr[x, y, 0] != 0:
            pass

end = datetime.now()
print(end - start)

在上述情况下,逐像素读取8000 x 8000图像。

array3d返回以下格式的元素:[R,G,B]。例如:(255, 255, 255) =白色。

在上面的示例中,使用array3d处理8000 ^ 2个元素花费的总时间为:0:01:41.996732

现在,做同样的事情,只是切换到array2d

...
    arr = pygame.surfarray.array2d(image)
...    
            if arr[x, y] != 0:

...

总时间为:0:00:20.632741

为什么呢?

0 个答案:

没有答案