我目前正在 Cython MemoryView
文件中设置我的 pyx
,如下所示:
@cython.boundscheck(False)
cdef int[:] fill_memview():
# This happens inside a big loop so needs to be fast
cdef int[:] x = np.empty(10)
for i in range(10):
x[i] = i
return x
cdef stupid_loop():
for i in range(10000):
fill_memview()
当我用
pyx
编译 cython -a foo.pyx
文件时,cdef int[:] x = np.empty(10)
行在生成的带注释的 html
文件中显示为深黄色(意味着它有很多 Python 调用会减慢速度。)我怎样才能更好地设置我输入的 Memoryview?
最佳答案
有关分配内存的不同方式的比较,请参阅 this answer。如果您的需求很简单(只是索引),请特别注意“cpython.array raw C type”,您可以创建一个 cpython 数组以进行快速创建,然后使用 as_ints[i]
进行快速不安全索引,或者如果您确实需要内存 View , cpython 数组上的内存 View 比 numpy 数组快 3 倍。
如果不了解代码的作用,就很难提供更具体的建议。例如,如果可能的话,您最好使用二维数组,因为分配一大块内存比分配许多小内存块更有效,例如,制作大量小内存 View 切片要快得多一个大内存 View 和一大块分配的内存,而不是创建一堆小内存 View ,每个 View 都有自己的一小块分配的内存。
关于python - 高效初始化 Cython Memoryview,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26843535/