簡體   English   中英

如何將 lambda 函數轉換為單獨的函數?

[英]how to convert lambda function into a separate function?

我不確定如何在將 lambda 函數轉換為單獨的函數后傳遞參數。

這是有效的原始代碼。

from sklearn.neighbors import BallTree
X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
aspect=2
tree = BallTree(X,metric="pyfunc",func=lambda p0, p1: math.sqrt((p1[0] - p0[0]) * (p1[0] - p0[0]) + (p1[1] - p0[1]) * (p1[1] - p0[1]) * aspect)) 

由於上面的 lambda 函數太長,我想從這個 lambda 函數中定義一個單獨的函數。

def elipse(p0,p1,aspect):

   a=math.sqrt((p1[0] - p0[0]) * (p1[0] - p0[0]) + (p1[1] - p0[1]) * (p1[1] - p0[1]) * aspect)  
   return  a

tree = BallTree(X,metric="pyfunc",func=elipse(X.iloc[:,0],X.iloc[:,1],aspect)) 

然后我得到了一個TypeError: 'float' object is not callable錯誤TypeError: 'float' object is not callable

我不確定如何通過 p0 和 p1 ,有人可以幫助我嗎? 謝謝

由於elipse()接受 3 個參數,但BallTree()僅提供 2 個參數,您仍然可以使用lambda ,但它更簡單,因為長方程在函數中。

tree = BallTree(X,metric="pyfunc",func=lambda p0, p1: elipse(p0, p1, aspect)) 

既然你現在有了一個命名函數,你只需要告訴BallTree這個名字是什么:

tree = BallTree(X,metric="pyfunc",func=elipse) 

此外,您不需要將aspect作為參數:

def elipse(p0, p1):
    aspect = 2
    return math.sqrt((p1[0] - p0[0]) * (p1[0] - p0[0]) + (p1[1] - p0[1]) * (p1[1] - p0[1]) * aspect)  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM