主要观点:通过“不安全 Python”将 numpy 代码加速 100 倍,以 pygame 写游戏时发现 OpenCV 图像缩放比 pygame 快,用pygame.surfarray.pixels3d
获取像素数组给cv2.resize
后速度变慢,研究发现是 numpy 数组的步幅(strides)导致性能差异巨大,SDL 布局与 numpy 默认布局不同,通过创建具有特定步幅的 numpy 数组并传递给cv2.resize
可恢复速度,还展示了一些其他函数的加速效果,“不安全 Python”体现了 Python 与 C 的互补及在高性能领域的主导地位。
关键信息:
- 用
pygame
写游戏,OpenCV
图像缩放比pygame
快。 pygame.surfarray.pixels3d
获取像素数组给cv2.resize
后变慢。- numpy 数组步幅不同导致性能差异巨大。
- SDL 布局与 numpy 默认布局差异及原因。
- 通过特定方式让
cv2.resize
在pygame
表面数据上运行变快。 - “不安全 Python”体现 Python 与 C 的互补及在高性能领域的主导地位。
重要细节: - 给出不同操作的基准测试时间,如
pg.Surface with smoothscale
耗时 0.2002 秒,np.zeros with cv2
耗时 0.0145 秒等。 - 详细解释 numpy 数组的内存布局及步幅概念,如对于 3D 数组
base + x*3*height + y*3 + z
等。 - 展示创建具有特定步幅的 numpy 数组并与
cv2.resize
配合的代码及效果。 - 说明“不安全 Python”中涉及的内存安全问题及与 Rust“unsafe”的区别。
- 提及 Python 与 C 的互补关系及在高性能领域的应用,如用 Cython 生成扩展等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。