Python快速单色位图

3 投票
3 回答
723 浏览
提问于 2025-04-16 09:38

我想实现一个1024x1024的单色网格,我需要从任何一个单元格读取数据,并插入不同尺寸的矩形。我尝试过用列表嵌套列表(就像二维数组那样),但发现布尔值的列表比整数的列表要慢。我还试过一维列表,结果比二维列表还慢。使用numpy的速度大约是标准Python列表的十倍慢。我发现最快的方法是用PIL和单色位图,通过“load”方法来实现,但我希望能更快运行,所以我尝试用shedskin来编译,但不幸的是,shedskin不支持PIL。你知道有没有什么方法可以在不重写成C或C++的情况下,更快地实现这样的网格吗?

3 个回答

0

我建议你看看 Cython,它可以把Python代码转换成C语言,这样就能更快地编译(如果你用distutils,它会帮你编译)。单单用Cython编译你的代码,就能让它运行得更快,尤其是像这种情况。不过,如果你添加一些cdef语句,速度提升会更明显。如果你 和Numpy一起使用,那么你可以更快速地访问Numpy数组。用这种方式使用Cython,速度提升会非常大。不过,如果你能提供一些示例代码,那样我会更容易帮助你。

0

我想建议你使用Python自带的数组类(http://docs.python.org/library/array.html),选择类型'B'。如果你每个像素用一个字节来编码,这样编程会最简单。不过,如果你想节省内存,可以把8个像素放在一个字节里,然后用自己的位操作来访问它们。

2

Raph建议使用数组的方法不错,但在CPython上效果不太好,实际上我觉得会慢10%到15%。不过如果你在PyPy上使用这个方法,我觉得效果会非常好。

撰写回答