用于cython的magic memoryView()样式转换
magicmemoryview的Python项目详细描述
允许我们将mmap.mmap或其他缓冲区强制转换为 正确类型的cython指针。
cython能够将很多东西投射到 正确的类型,特别是借助于memoryview。然而, 在python 2中,memoryview缺少memoryview.cast方法 (所以cython不会让我们改变数组的维数)。此外, python 2和3都要求内存映射是可写的(使 指针类型const在这里似乎也没有帮助)。
这个类接受一个(可能是只读的)memmap对象,并生成一个 python对象,具有返回正确内容的__getbuffer__方法。 它假装底层缓冲区是可写的以使cython 快乐。如果给它一个只读缓冲区,并尝试写入结果, 那你就不开心了。
当cython将python对象转换为指针时,它保存一个 为了防止 指被垃圾回收的内存。那MagicMemoryView 反过来保持对底层数据的引用,所以所有的东西都应该 按预期行事。
用法:
from magicmemoryview import MagicMemoryView cdef double data[:, :, :] data = MagicMemoryView(source_buffer, (24, 12, 25), "d")