如何使用numpy.ndpointer从C为ctypes python调用声明双**?
我想知道如何将ndpointer用于双** 考虑一个顶点[100000][3]的矩阵和一个类似C的函数:如何使用numpy.ndpointer从C为ctypes python调用声明双**?,python,c,numpy,ctypes,Python,C,Numpy,Ctypes,我想知道如何将ndpointer用于双** 考虑一个顶点[100000][3]的矩阵和一个类似C的函数: double dist(double **vertex) 要从C调用此函数,我需要创建以下指针矩阵: double **b=(double **)malloc(sizeof(double)*100000); for (i=0;i<100000;i++) { b[i]=(double*)malloc(sizeof(double)*3); } 问题是创建顶点
double dist(double **vertex)
要从C调用此函数,我需要创建以下指针矩阵:
double **b=(double **)malloc(sizeof(double)*100000);
for (i=0;i<100000;i++)
{
b[i]=(double*)malloc(sizeof(double)*3);
}
问题是创建顶点的循环
如何使用numpy.ctypeslib中的ndpointer避免此循环?
[如何使用numpy.ctypeslib.ndpointer声明指针的指针?]
谢谢你的帮助
-巴科
编辑-错误/低解决方案:
我发现避免此循环的唯一方法是使用以下命令修改dist声明:
double dist(double (*vertex)[3])
然后我可以在python代码中使用ndpointer:
lib.dist.argtypes = [np.ctypeslib.ndpointer(ndim=2,shape=(100000,3))]
result=lib.dist(vertex_np)
ndpointer
是子类的工厂。作为结果类型,\u ndptr
提供了一个\uuu数组\u接口\uuu
来从指针创建数组。作为一个参数,\u ndptr
在返回obj.ctypes
之前检查类型、数据类型、ndim、形状和标志,这将从其get\u As\u参数
方法返回一个void*
。那么,您的意思是不可能使用ndpointer类创建指针指针指针?我有点困惑,dist
是您的函数还是您在其他库中调用的函数,它需要一个double**
?处理连续数组是一种不方便的方法。ndpointer
返回\u ndptr
的子类,该子类不满足您的要求。你可以做一个类似的类型。不过,指针数组仍然需要初始化。作为结果类型,它不是很有意义,除非您想创建数组的元组。
lib.dist.argtypes = [np.ctypeslib.ndpointer(ndim=2,shape=(100000,3))]
result=lib.dist(vertex_np)