【发布时间】:2015-02-25 05:20:59
【问题描述】:
将 numpy 矩阵作为参数传递给采用双指针的 C 函数的规范方法是什么?
上下文:我正在使用 numpy 来验证一些 C 代码,我有一个 C 函数,它采用 const double ** const,我正在使用 ctypes 来调用来自 Python 的 .so。
我试过了:
func.argtypes = ctypeslib.ndpointer(dtype=double, ndim=2, flags="C_CONTIGUOUS")
并直接传递numpy矩阵(没用),以及
func.argtypes = ctypes.POINTER(ctypes.POINTER(ctypes.c_double))
然后通过各种强制转换传递numpy 矩阵。强制转换导致 Python 错误
TypeError: _type_ must have storage info
注意:这个问题是几年前提出的here,但没有完全成功的解决方案。
【问题讨论】:
-
Numpy 数组理想情况下是一块连续的内存,索引类似于
A[i,j] = A[i*n_columns + j],而不是包含指向双精度数组的指针的一维数组,因此没有简单的解决方案。您需要手动构建指向每一行的一维指针数组。 -
@RobertT.McGibbon:想要将其移至答案以便我们关闭问题?
-
numpy 邮件列表上也有关于这个话题的非常完整的讨论:mail.scipy.org/pipermail/numpy-discussion/2015-January/…