python - 从双指针(来自 CythonGSL)获取 numpy ndarray (查看,而不是复制)

标签 python numpy cython

在使用 CythonGSL 时,我发现自己需要为“gsl 向量”创建 numpy.ndarray View ,该 View 在以下 cython 代码中定义:

ctypedef struct gsl_vector:
    size_t size
    size_t stride
    double *data
    gsl_block *block
    int owner

所以我可以访问向量的大小以及指向它的指针。我如何使用它们来获取该向量的 numpy.ndarray View ?

这是我失败的尝试:

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

正确的类型转换方法是什么?

最佳答案

这里有一件有效的事情:

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 doc 很有帮助,但我仍然希望得到一些关于最佳实践(无论是为了效率还是为了持续正确性)的答案。

关于python - 从双指针(来自 CythonGSL)获取 numpy ndarray (查看,而不是复制),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32571821/

相关文章:

python - aiohttp/从上下文管理器中获取响应对象

python - 为什么 Numpy 对待 a+=b 和 a=a+b 的方式不同

c++ - 如何连接通过 cython 返回对象引用的 C++ 函数

python - Cython 不够快

python - Sympy 与 Cython 在尝试查找根时生成奇异矩阵

python - 需要在 pandas 的数据帧上聚合计数(rowid,colid)

python - 从python代码获取html输出

python - flake8 在过滤器子句中提示 bool 比较 "=="

python - 使用 pytables 构建一个巨大的 numpy 数组

python - 在python3.4中加载.npy文件错误