arrays - 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
。
为什么这个?
解决方案
推荐阅读
- python - 在python中将字符串列表拆分为字典键
- javascript - 辅助系列上的 Highmaps get() 函数
- python - 在另一个循环内调用时的 Python 循环行为
- azure - Azure API Set-body JSON to JSON 隐蔽
- html - XSL - 如何匹配或选择空元素以插入生成的内容
- flutter - 如何获得响应式 Flutter 布局?
- php - 为什么在 Authenticatable 中找不到方法?使用带有 Stripe API 的 Laravel 6 Cashier 10?
- filter - 如何根据属性过滤neo4j中的节点列表
- sql-server - 删除所有非字母数字字符、上标和下标的函数,破折号“-”除外
- r - 如何将 na_rm 与 rpy2 rlf.tapply 函数一起使用