使用ctypes从C函数向Python返回C数组
我目前正试图通过编写一个C函数来减少Python程序的运行时间,以便在一个非常大的数组上完成繁重的工作。目前,我正在使用这个简单的函数使用ctypes从C函数向Python返回C数组,python,c,ctypes,Python,C,Ctypes,我目前正试图通过编写一个C函数来减少Python程序的运行时间,以便在一个非常大的数组上完成繁重的工作。目前,我正在使用这个简单的函数 int * addOne(int array[4]) { int i; for(i = 0; i < 5; i++) { array[i] = array[i] + 1; } return array; } 如何从返回的指针创建Python列表?返回的指针实际上与传递的指针相同。也就是说,实际上不需
int * addOne(int array[4])
{
int i;
for(i = 0; i < 5; i++)
{
array[i] = array[i] + 1;
}
return array;
}
如何从返回的指针创建Python列表?返回的指针实际上与传递的指针相同。也就是说,实际上不需要返回数组指针 当您将一个指向支持列表的内存区域的指针从Python传递到C时,C函数可以更改该内存。您可以返回一个整数状态代码来标记一切是否按预期进行,而不是返回指针
int addOne(int array[4])
{
int i;
for(i = 0; i < 5; i++)
{
array[i] = array[i] + 1; //This modifies the underlying memory
}
return 0; //Return 0 for OK, 1 for problem.
}
对于这个问题已经有了一个很好的答案,但这里有一个替代选项:如果您想快速处理大型数值数据数组,而不是编写自己的c扩展,您可以使用。这正是numpy的用途,它的速度非常快。这能回答你的问题吗?非常感谢!现在对我有用了。还有一件事。。。如何构造2d ctypes数组?干杯,尼克
int addOne(int array[4])
{
int i;
for(i = 0; i < 5; i++)
{
array[i] = array[i] + 1; //This modifies the underlying memory
}
return 0; //Return 0 for OK, 1 for problem.
}
from ctypes import *
libCalc = CDLL("libcalci.so")
pyarr = [65, 66, 67, 68] #Create List with underlying memory
arr = (ctypes.c_int * len(pyarr))(*pyarr) #Create ctypes pointer to underlying memory
res = libCalc.addOne(arr) #Hands over pointer to underlying memory
if res==0:
print(', '.join(arr)) #Output array