上下文:我的 Python 代码将二维顶点数组传递给 OpenGL。
我测试了 2 种方法,一种使用 ctypes,另一种使用 struct,后者快两倍以上。
from random import random
points = [(random(), random()) for _ in xrange(1000)]
from ctypes import c_float
def array_ctypes(points):
n = len(points)
return n, (c_float*(2*n))(*[u for point in points for u in point])
from struct import pack
def array_struct(points):
n = len(points)
return n, pack("f"*2*n, *[u for point in points for u in point])
还有其他选择吗? 关于如何加速此类代码的任何提示(是的,这是我的代码的瓶颈之一)?
最佳答案
您可以将 numpy 数组传递给 PyOpenGL 而不会产生任何开销。 (numpy 数组的 data
属性是指向底层 C 数据结构的缓冲区,它包含与您正在构建的数组相同的信息)
import numpy as np
def array_numpy(points):
n = len(points)
return n, np.array(points, dtype=np.float32)
在我的电脑上,这比基于 struct
的方法快大约 40%。
关于python - 在 python 中从浮点元组列表构建 c 数组的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4156872/