Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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
Python 如何将3d和4d numpy.array传递给swig_Python_Numpy_Swig - Fatal编程技术网

Python 如何将3d和4d numpy.array传递给swig

Python 如何将3d和4d numpy.array传递给swig,python,numpy,swig,Python,Numpy,Swig,我正在使用python计算一些东西,但我想让它更快。所以我用了swig 我想在同一个函数中使用3d数组和4d数组 大口 %apply (double *INPLACE_ARRAY3, int DIM1, int DIM2, int DIM3)\ {(double *trans, int trans_dim1, int trans_dim2, int trans_dim3)}; %apply (double *INPLACE_ARRAY4, int DIM1, int DIM2, int DIM

我正在使用python计算一些东西,但我想让它更快。所以我用了swig

我想在同一个函数中使用3d数组和4d数组

大口

%apply (double *INPLACE_ARRAY3, int DIM1, int DIM2, int DIM3)\
{(double *trans, int trans_dim1, int trans_dim2, int trans_dim3)};

%apply (double *INPLACE_ARRAY4, int DIM1, int DIM2, int DIM3, int DIM4)\
{(double *sample,int sam_dim1, int sam_dim2, int sam_dim3, int sam_dim4)};
样本h

void update_transition(double *trans,int trans_dim1,int trans_dim2, int trans_dim3,
 double *sample,int sam_dim1, int sam_dim2, int sam_dim3, int sam_dim4, double DENO);
但当我在python中使用它时,错误:

**TypeError: update_transition() takes exactly 7 arguments (3 given)**

这是否意味着我的3d阵列可以被swig识别,但4d阵列不能?如何解决这个问题?这两个我都想要。

Python说它希望函数调用有7个参数。C++函数期望为10。如果SWIG能够应用这两种类型映射,那么Python函数应该是3,而不是7。从10到7的唯一方法是SWIG错过第二个typemap;因此,它能够匹配函数的第一个数组,但不能匹配第二个数组。要确认这一点,请使用上提到的一些技术。还可以查看生成的代码。你可能想尝试的是一个5参数的C++测试函数,它采用一维数组和2D数组,用一个2参数Python函数用InPosieRayay1和2导出。这是一个更简单的问题


若这并不能解决问题,但能给你们提供有用的信息,那个么把它添加到你们的问题中,也许我或其他人可以再看看

谢谢斯科利的帮助。它之所以出现是因为它不识别4d阵列,尤其是numpy。我没有实现这一部分。因此,我只编写了一个类似于用numpy.I编写的3d数组,并将numpy.I添加到makefile中


它起作用了

在代码中的某个地方,调用
update\u transition
函数时,应该传递
7个参数,而不是
3
,例如:
update\u transition(a、b、c、d、e、f、g)