【问题标题】:Creating numpy array from c-pointer crashes ipython kernel [duplicate]从c指针创建numpy数组会使ipython内核崩溃[重复]
【发布时间】:2020-03-11 16:47:02
【问题描述】:

使用这段代码,我试图从一个 malloc 的 c 指针创建一个 numpy 数组,灵感来自 blog post from Gaël Varoquaux

创建数组的行似乎会导致无效的内存访问,因为它会使内核崩溃。我做错了什么?

%%cython -f

from libc.stdlib cimport malloc
import numpy as np
cimport numpy as np

cdef array_from_pointer(double* ptr, int size):
    cdef np.npy_intp shape_c[1]
    shape_c[0] = <np.npy_intp> size
    ndarray = np.PyArray_SimpleNewFromData(1, shape_c, np.NPY_FLOAT64, ptr)
    return ndarray


cdef N = 12
cdef double* ptr = <double*> malloc(sizeof(double)*N)

array_from_pointer(ptr, N)

【问题讨论】:

标签: python numpy cython


【解决方案1】:

在使用numpy的Array API之前,需要调用np.import_array()

%%cython -f

from libc.stdlib cimport malloc
import numpy as np
cimport numpy as np
np.import_array()

cdef array_from_pointer(double* ptr, int size):
    cdef np.npy_intp shape_c[1]
    shape_c[0] = <np.npy_intp> size
    ndarray = np.PyArray_SimpleNewFromData(1, shape_c, np.NPY_FLOAT64, ptr)
    return ndarray


cdef N = 12
cdef double* ptr = <double*> malloc(sizeof(double)*N)

array_from_pointer(ptr, N)

不这样做会导致导致 ipython 内核崩溃的分段错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多