首页 > 解决方案 > array3d 和 array2d 之间的荒谬性能差异

问题描述

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

请参阅此基准:

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

为什么这个?

标签: arrayspython-3.xperformancenumpypygame

解决方案


推荐阅读