python - 如何使用scipy的leastsq来求解数组?

标签 python scipy

我们是否可以使用Scipy的leastsq求解器(或python中的任何其他函数)来查找数组而不是向量?

基本上,我想找到最小化函数 my_funcC。我认为一种方法是将 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/

相关文章:

Python,如何在函数之外使用函数的一部分

python - 在阅读之前懒惰地过滤文件

python - 我应该使用 PyQT4 在 Python 中编写跨平台软件吗?

python - 数据装箱 : irregular polygons to regular mesh

python - 如何在 mayavi 中正确显示具有非立方体素的体积

python - 用python计算时间序列数据的概率分布

python - 如何在 PyCharm 中更改 Python 版本

python - 如何在python中获取log10值的倒数?

python - 使用正交积分

python - 为什么 scipy.optimize.minimize(默认)报告成功而不用 Skyfield 移动?