首页 文章

Cython:将内存视图转换为NumPy数组

提问于
浏览
15

如何在cython中将类型化的内存视图转换为NumPy数组?文档有

cimport numpy as np
import numpy as np

numpy_array = np.asarray(<np.int32_t[:10, :10]> my_pointer)

我把它当作我的情况

np.asarray(<np.float_t[:, :]> my_memview)

使用这个编译器告诉我:

Can only create cython.array from pointer or array

复制与否并非如此具有决定性 . 我找不到任何帮助 .

1 回答

  • 23

    您应该只能在memoryview本身上直接使用 np.asarray ,所以类似于:

    np.asarray(my_memview)
    

    应该管用 . 例如,如果您的cython源文件包含以下内容:

    import numpy as np
    cimport numpy as np
    def test(double[:,:] x):
        print type(x)
        print type(np.asarray(x))
    

    然后在编译之后,您应该能够从python端执行以下操作:

    a = np.random.normal(size=(5,5))
    test(a)
    

    其中产生以下输出:

    <type '_cython_magic_0182fca918bfa3618c3553e51b13e8ba._memoryviewslice'>
    <type 'numpy.ndarray'>
    

    注意:我正在使用IPython的cythonmagic扩展 .

相关问题