Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用numpy.ndpointer从C为ctypes python调用声明双**?_Python_C_Numpy_Ctypes - Fatal编程技术网

如何使用numpy.ndpointer从C为ctypes python调用声明双**?

如何使用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); } 问题是创建顶点

我想知道如何将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);
  }
问题是创建顶点的循环

如何使用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)