我们是否可以使用Scipy的leastsq求解器(或python中的任何其他函数)来查找数组而不是向量?
基本上,我想找到最小化函数 my_func
的 C
。我认为一种方法是将 C 转换为向量并重写函数 my_func 以使未知数成为向量。但是,还有更好的办法吗?
import numpy as np
from scipy.optimize import leastsq
def my_func(C, x, y):
return y - C.dot(x)
x_data = np.array([2, 3, 4])
y_data = np.array([20, 30])
starting_guess = np.ones((2, 3))
data = (x_data, y_data)
result = leastsq(my_func, starting_guess, args=data)
print result
solution = result[0]
print solution
最佳答案
您可以使用 numpy
库中的 flatten()
和 reshape()
在一维和二维数组之间来回切换。至于最小化本身,我建议scipy.optimize.minimize()
。
请注意,两个向量之间的差异是一个向量(我在这里指的是v = y - C.x
),因此您需要范数将其转换为可以最小化的指标。下面,您可以找到有关如何编写此代码的一个很好的示例:
import numpy as np
from scipy.optimize import minimize
def my_func(C_flat, x, y):
# print(np.linalg.norm(y - np.dot(C_flat.reshape(2, 3), x), 2))
return np.linalg.norm(y - np.dot(C_flat.reshape(2, 3), x), 2)
x_data = np.array([2, 3, 4])
y_data = np.array([20, 30])
C0 = np.ones((2, 3))
data = (x_data, y_data)
result = minimize(my_func, C0.flatten(), args = data)
print(result)
solution = result["x"].reshape(2,3)
print(solution)
关于python - 如何使用scipy的leastsq来求解数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55957411/