无论如何,我们可以使用Scipy的minimumsq求解器(或python中的任何其他函数)来找到数组而不是向量吗?
基本上,我想找到最小化功能C
的{{1}}。我认为一种方法是将my_func
转换为向量,然后重写函数C
,以使未知数成为向量。但是,还有更好的方法吗?
my_func
答案 0 :(得分:2)
您可以使用flatten()
库中的reshape()
和numpy
在1d和2d数组之间来回移动。至于最小化本身,我建议使用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)