我目前正在 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/

10-11 22:24
查看更多