Абсурдная разница в производительности между array3d и array2d - PullRequest
0 голосов
/ 27 сентября 2018

Используя pygame.surfarray для управления изображением в виде массива, манипуляции с любым элементом в 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, Б].Пример: (255, 255, 255) = Белый.

В приведенном выше примере обработка 8000 ^ 2 элементов с использованием array3d занимает общее время: 0:01:41.996732

Теперь, делая то же самое, просто переключаясь наarray2d:

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

...

Общее время: 0:00:20.632741.

Почему это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...