gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:29:32 25 4
gpt4 key购买 nike

在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com