我目前MemoryView
在我的Cythonpyx
文件中设置,如下所示:
@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实例化?
请参阅此答案以比较不同方式分配内存。如果您的需求很简单(只需建立索引),请特别注意“ cpython.array raw C类型”,则可以创建一个cpython数组以快速创建,然后as_ints[i]
用于快速不安全索引,或者如果确实需要内存视图,则使用内存cpython数组上的视图比numpy数组快3倍。
如果不对代码的用途有更全面的了解,很难提供更具体的建议。例如,如果可能的话,使用二维数组会更好,因为分配一个大块的内存往往比分配许多小块的效率更高,例如,制作许多小块的内存视图切片会更快。一个大内存视图具有大量分配的内存,而不是创建一堆小内存视图,每个视图都有自己的小块分配内存。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句