2014-10-27 73 views
0

我想使用scipy.optimize.brute为我已成功移植到python的double -> double类型的C++函数func_cpp类型不匹配错误使用scipy.optimize.brute移植的c + +函数

由于`scipy.optimize.brute'只接受numpy数组上的函数(请参阅下面的屏幕截图以了解其接口的详细信息),如果我理解正确,我需要将我的func_cpp包装为一维numpy阵列。所以我用:

def: func_cpp_array (arr): 
    return np.array(map (func_cpp, arr.tolist()) 

上面的结构肯定是尴尬的(任何建议不笨笨?)。但是,它应该返回可由scipy.optimize.brute接受的可调用函数。然而,我得到一个类型不匹配错误

TypeError: argument 2 to map() must support iteration 

当我使用

ranges=slice(0,1,10) 
scipy.optimize.brute (func_app_array, (ranges,)) 

任何一个可以解释,为什么我得到这个类型不匹配错误和如何解决它?

为方便起见,scipy.optimize.brute的接口附下面:

enter image description here

回答

1

输入参数阵列是squeezed它被传递给你的函数之前。一维数组变成一个0-D数组,基本上就是你想要使用的数值。只使用你的func_cpp而不包装。另外,请注意slice被定义为slice(start,stop [,step]),您可能打算切换第二个和第三个参数。

+0

@ w.m.但是,如果我直接使用没有包装的func_cpp,交互式控制台会给我func_cpp(numpy.ndarray) 与C++签名不匹配:func(double)其中func_cpp是python函数,func是原始的C++函数。任何想法? – zell 2014-10-27 16:10:19

+0

好吧,你需要恢复你的包装fn并找到一种方法来从0-D数组中提取值。我不知道如何获得C++函数的准确数据类型,可能是float(arr)或np.float64(arr)或arr.item()? – 2014-10-27 16:16:30