【问题标题】:Cython: Convert memory view to NumPy arrayCython:将内存视图转换为 NumPy 数组
【发布时间】:2014-01-25 12:48:51
【问题描述】:

如何在 cython 中将类型化的 memoryview 转换为 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

复制与否并不是决定性的。我在这方面找不到任何帮助。

【问题讨论】:

    标签: python arrays numpy cython memoryview


    【解决方案1】:

    您应该可以直接在内存视图本身上使用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 扩展。

    【讨论】:

    • 也许它太简单了。现在编译得很好。你会检查我的other question 吗?我不敢扩展这个
    • 这不适用于结构类型吗?它返回一个“TypeError:期望一个可读的缓冲区对象”
    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多