我有一个问题是通过ctypes将整数的Numpy ndarray传递给C函数。下面是一个显示问题的MWE。首先是C函数,它只需要一个数组作为参数打印其值。
#include <stdio.h>
void my_fun(int *array, int num)
{
for(int i=0; i<num; i++){
printf("array value: %d \n", array[i]);
}
}
现在是Python / ctypes实现:
import numpy as np
import ctypes
c_int_p = ctypes.POINTER(ctypes.c_int)
_sample_lib = np.ctypeslib.load_library('_sample','.')
_sample_lib.my_fun.restype= None
_sample_lib.my_fun.argtypes = [c_int_p, ctypes.c_int]
my_array = np.arange(5,dtype=np.int)
_sample_lib.my_fun(my_array.ctypes.data_as(c_int_p), len(my_array))
运行Python代码会产生:
array value: 0
array value: 0
array value: 1
array value: 0
array value: 2
注意数组中的额外0。为什么他们在那里,我怎么摆脱他们?