在使用CythonGSL时,我发现自己需要为“gsl vector”创建一个numpy.ndarray视图,该视图在以下cython代码中定义:
ctypedef struct gsl_vector:
size_t size
size_t stride
double *data
gsl_block *block
int owner
所以我可以访问向量的大小以及指向它的指针。我怎样才能使用这些来获得这个向量的numpy.ndarray视图?
这是我失败的尝试:
import numpy as np
cdef mycast(const gsl_vector *v):
cdef size_t n = v.size
return np.ctypeslib.as_array((ctypes.c_double * n).from_address(v.data))
但是,
失败了Cannot convert 'const double *' to Python object
进行投射的正确方法是什么?
答案 0 :(得分:2)
这是一件有用的事情:
import numpy as np
from cython cimport view
cdef mycast(const gsl_vector *v):
cdef size_t n = v.size
cdef double[:] myview = <double[:n]> v.data
return np.asarray(myview)
阅读cython typed memoryviews文档是有帮助的,但我仍然会欣赏一些关于最佳实践(效率和持续正确性)的答案。