如何使用Scipy的Minimumsq求解数组?

时间:2019-05-02 17:22:13

标签: python scipy

无论如何,我们可以使用Scipy的minimumsq求解器(或python中的任何其他函数)来找到数组而不是向量吗?

基本上,我想找到最小化功能C的{​​{1}}。我认为一种方法是将my_func转换为向量,然后重写函数C,以使未知数成为向量。但是,还有更好的方法吗?

my_func

1 个答案:

答案 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)