gpt4 book ai didi

arrays - 将 2d numpy 数组传递给 C++ 时出现 TypeError

转载 作者:行者123 更新时间:2023-12-01 06:32:54 31 4
gpt4 key购买 nike

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

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)

我得到一个 TypeError: array cannot be safely cast to required type .谁能指出我如何以正确的方式传递这些数组?

供引用:为了创建模块,我使用了接口(interface)文件
%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);
}
%}

最佳答案

@Jaimie 当然是对的。像'double'这样的'float'在numpy中是64位的,这就是为什么我没有再次检查,我只记得没关系。但是 c++ 中的 float 显然需要 32 位,在 numpy 中是 'float32' .
谢谢!

关于arrays - 将 2d numpy 数组传递给 C++ 时出现 TypeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18270618/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com