gpt4 book ai didi

python - 有效地初始化 Cython Memoryview

转载 作者:太空狗 更新时间:2023-10-30 03:01:04 24 4
gpt4 key购买 nike

我目前正在我的 Cython pyx 文件中设置我的 MemoryView,如下所示:

@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()

当我使用 cython -a foo.pyx 编译 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com