【问题标题】:Fitting 2D functions in python在python中拟合二维函数
【发布时间】:2020-10-31 07:00:20
【问题描述】:

我有两个变量,x 和 y 在 x_values 和 y_values 中取值:

x_values = np.linspace(x_min,x_max,n)
y_values = np.linspace(y_min,y_max,n)

还有一个测量的二维数组 z(n x n 矩阵)。

我想用一个函数来拟合 z,比如在 scipy.optimize.curve_fit 中。 但如果我是正确的,这仅适用于一维函数。

我的梦想是这样的:

curve_fit2D(custom_2D_function, (x_values,y_values), z)

我在 scipy 文档中找不到任何东西,我缺少什么吗?

【问题讨论】:

    标签: python optimization scipy curve-fitting


    【解决方案1】:

    来自curve_fitdocumentation

    xdata: array_like or object
    
        The independent variable where the data is measured. Should usually be an 
        M-length sequence or an (k,M)-shaped array for functions with k predictors, 
        but can actually be any object.
    

    这意味着xdata 的每一列必须对应z 的一个条目。

    解决方案

    重塑您的数据,使每个z 都有一对(x, y)。假设(x[i], y[j])z[i, j] 一起使用,您可以通过这种方式重塑。

    z_vec = z.flatten()
    x_data = np.array([
        (x[i // z.shape[1]], y[i % z.shape[1]]) 
        for i in range(len(z_vec))
    ]).T
    
    assert x_data.shape[1] == len(z_vec)
    assert x_data.shape[0] == 2
    

    然后照常使用curve_fit

    curve_fit(custom_2D_function, x_data, z_vec)
    

    【讨论】:

    • 谢谢,但它不起作用,xdata 必须与 z 具有相同的形状。我会想办法,但我确信可以做一些干净的事情
    • @hulyce 它对我有用。您确定z 是与x_valuesy_values(又名(z.ndim == 1) and (len(z) == xdata.shape[1]))长度相同的一维数组吗?
    • 感谢@hulyce 的澄清!对于z 中的每个条目,您必须重新调整您的输入以拥有一列xdata。我已经更新了我的答案以展示如何做到这一点。
    猜你喜欢
    • 2015-07-21
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 2015-04-05
    • 1970-01-01
    • 2019-10-04
    相关资源
    最近更新 更多