Arrays 将2d numpy数组传递给C+时出现类型错误+;

Arrays 将2d numpy数组传递给C+时出现类型错误+;,arrays,numpy,swig,Arrays,Numpy,Swig,我有一个numpyarray中的二维数据和C++代码,我想对这些数据执行一些操作。使用swig和distutils以及numpy.i我成功地将所有内容编译成一个python扩展“goldstein”,该扩展提供了一个函数unwrap2d。 我使用 我得到一个类型错误:数组无法安全地转换为所需类型。有人能告诉我如何以正确的方式通过这些阵列吗 参考:为了创建模块,我使用了接口文件 @杰米当然是对的float’like’double’在numpy中是64位的,这就是为什么我没有再次检查的原因,我只

我有一个numpyarray中的二维数据和C++代码,我想对这些数据执行一些操作。使用swig和distutils以及
numpy.i
我成功地将所有内容编译成一个python扩展“goldstein”,该扩展提供了一个函数
unwrap2d
。 我使用

我得到一个
类型错误:数组无法安全地转换为所需类型。有人能告诉我如何以正确的方式通过这些阵列吗

参考:为了创建模块,我使用了接口文件


@杰米当然是对的float’like’double’在numpy中是64位的,这就是为什么我没有再次检查的原因,我只是记得这并不重要。但是,C++中的浮点显然需要32位,在NUMPY中是“代码”> FLUAT32’< /COD>。
谢谢大家!

我试图打开语法突出显示,但没有成功…:(您的
data
数组是dtype double,但是您的C函数需要一个float。这可能是NumPy抱怨的原因。在调用函数之前,执行
data=np.ascontiguousarray(data\u temp,dtype='float')
import goldstein

data = np.ascontiguousarray(data_temp, dtype='double')
mask = np.ascontiguousarray(mask_temp, dtype='uint16')
outdata = np.ones_like(data)

goldstein.unwrap2d(data,mask,outdata)
%define DOCSTRING
"Wrapper for c++-code"
%enddef

%module(docstring=DOCSTRING) goldstein

%{
    #define SWIG_FILE_WITH_INIT
    #include "goldstein.h"
%}

/*include numpy typemaps*/
%include "numpy.i"
/*initialize module*/
%init %{
    import_array();
%}

%rename(unwrap2d) phase_unwrapping_func;

/* typemaps for the arrays*/
%apply (int DIM1,int DIM2,float* IN_ARRAY2) {(int xsize,int ysize,float* in)};
%apply (int DIM1,int DIM2,unsigned short* IN_ARRAY2) {(int x1,int y1,unsigned short* mask)};
%apply (int DIM1,int DIM2,float* INPLACE_ARRAY2) {(int x2,int y2,float* out)};

/*wrapper function calling the original phase_unwrapping using only the needed parameters*/
%inline %{
void phase_unwrapping_func(int xsize,int ysize,float* in,int x1,int y1,unsigned short* mask,int x2,int y2,float* out) {
    phase_unwrapping(xsize, ysize, in, mask, out);
    }
%}