2014-10-27 34 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