【发布时间】:2018-07-26 20:04:41
【问题描述】:
我想在 Cython 中使用一个小的 C 例程。 C函数本身是
#include <stdio.h>
#include "examples.h"
void add_array(int **io_array, int n) {
int i;
int *array;
array = (int *) malloc(n * sizeof(int));
for(i = 0; i < n; i++) {
array[i] = i;
}
*io_array = array;
}
以及函数原型:
#ifndef EXAMPLES_H
#define EXAMPLES_H
void add_array(int **io_array, int n);
#endif
现在我想使用 Cython 将 C 函数与:
cdef extern from "examples.h":
void add_array(int **io_array, int n)
import numpy as np
def add(arr):
if not arr.flags['C_CONTIGUOUS']:
arr = np.ascontiguousarray(arr, dtype=np.int32)
cdef int[::1] arr_memview = arr
add_array(&arr_memview[0], arr_memview.shape[0])
return arr
编译时报错:
pyexamples.pyx:13:14: Cannot assign type 'int *' to 'int **'
接口这个函数的正确方法是什么?
【问题讨论】:
-
我对 Cython 的了解不足以告诉您执行此操作的正确方法,但问题肯定是您的 C 函数设置为分配和填充 (C) 数组。您正在传递一个指向数组内容的指针,但该函数希望接收一个指向指针的指针,它可以使用内容的 location 进行更新。