簡體   English   中英

<lambda>() 接受 1 個位置參數,但給出了 2 個

[英]<lambda>() takes 1 positional argument but 2 were given

我試圖在這里實現相同的 Sage 代碼:在 python 中找到向量中心,如下:

import numpy as np
from scipy.optimize import minimize
def norm(x):
    return x/np.linalg.norm(x)

vectors = np.array([[1,2,3],[4,5,6],[7,8,9]])
unit_vectors = [np.divide(v,norm(v)) for v in vectors]
constraints = [lambda x: np.dot(x,u)-1 for u in unit_vectors]
target = lambda x: norm(x)
res = minimize(target,[3,3,3],constraints)

但我一直遇到同樣的問題:

TypeError: <lambda>() takes 1 positional argument but 2 were given

我不是數學家,我只是想寫一個可以找到多維向量中心的代碼。 我嘗試了很多方法來解決問題,但沒有任何效果。

謝謝。

您指出的答案的算法不是用 python 編寫的,因此考慮我已經實現以下解決方案的官方文檔,這顯然可能會失敗:

import numpy as np
from scipy.optimize import minimize


x0 = 10, 10, 10

vectors = [
    np.array([1, 2, 3]),
    np.array([1, 0, 2]),
    np.array([3, 2, 4]),
    np.array([5, 2, -1]),
    np.array([1, 1, -1]),
]

unit_vectors = [vector / np.linalg.norm(vector) for vector in vectors]
constraints = [
    {"type": "ineq", "fun": lambda x, u=u: (np.dot(x, u) - 1)} for u in unit_vectors
]

target = lambda x: np.linalg.norm(x)
res = minimize(fun=target, x0=x0, constraints=constraints)
print(res.x)

輸出:

[1.38118173 0.77831221 0.42744313]

暫無
暫無

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

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