类型不匹配错误使用scipy.optimize.brute移植的c + +函数
问题描述:
我想使用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的接口附下面:
答
输入参数阵列是squeezed它被传递给你的函数之前。一维数组变成一个0-D数组,基本上就是你想要使用的数值。只使用你的func_cpp而不包装。另外,请注意slice被定义为slice(start,stop [,step]),您可能打算切换第二个和第三个参数。
@ w.m.但是,如果我直接使用没有包装的func_cpp,交互式控制台会给我func_cpp(numpy.ndarray) 与C++签名不匹配:func(double)其中func_cpp是python函数,func是原始的C++函数。任何想法? – zell 2014-10-27 16:10:19
好吧,你需要恢复你的包装fn并找到一种方法来从0-D数组中提取值。我不知道如何获得C++函数的准确数据类型,可能是float(arr)或np.float64(arr)或arr.item()? – 2014-10-27 16:16:30