<lambda>() 采用 1 个位置参数,但给出了 2 个
<lambda>() takes 1 positional argument but 2 were given
我正在尝试在此处实现相同的 Sage 代码:find vector center in 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 中,因此显然会失败,考虑到 the official docs 我已经实现了以下解决方案:
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]
我正在尝试在此处实现相同的 Sage 代码:find vector center in 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 中,因此显然会失败,考虑到 the official docs 我已经实现了以下解决方案:
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]