[英]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.