【问题标题】:Fitting 3D points python拟合3D点python
【发布时间】:2013-03-14 23:34:25
【问题描述】:

我有一个 python 代码,它产生一个由数字 x、y 和 z 组成的三元组列表。我想使用 scipy curve_fit 拟合 z= f(x,y)。这是一些无效的代码

A = [(19,20,24), (10,40,28), (10,50,31)]

def func(x,y,a, b):
    return x*y*a + b

如何让 python 使这个函数适合列表A 中的数据?

【问题讨论】:

    标签: python scipy


    【解决方案1】:
    • func 的第一个参数必须是数据(x 和 y)。
    • func 的其余参数表示参数。

    所以你需要稍微修改一下你的func

    def func(data, a, b):
        return data[:,0]*data[:,1]*a + b
    

    • curve_fit 的第一个参数是函数。
    • 第二个参数是独立的dataxy在 一个数组的形式)。
    • 第三个参数是依赖数据 (z)。
    • 第四个参数是对参数值的猜测(a 在这种情况下是b。)

    所以,例如:

    params, pcov = optimize.curve_fit(func, A[:,:2], A[:,2], guess)
    

    import scipy.optimize as optimize
    import numpy as np
    
    A = np.array([(19,20,24), (10,40,28), (10,50,31)])
    
    def func(data, a, b):
        return data[:,0]*data[:,1]*a + b
    
    guess = (1,1)
    params, pcov = optimize.curve_fit(func, A[:,:2], A[:,2], guess)
    print(params)
    # [ 0.04919355  6.67741935]
    

    【讨论】:

    • 当且仅当 x 和 y 具有相同维度的特征时,此解决方案才有效。如何将这段代码推广到不同形状的 x、y 上?
    • 答案已经是任意的 x,y,z 点集合,因此没有隐含的形状。只需打印 A[:,:2] 和 A[:,2] 即可看到第一个是 (x,y) 点的集合,第三个是数据 (z)。
    猜你喜欢
    • 2013-03-07
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 2011-01-22
    • 1970-01-01
    • 2017-08-30
    • 2016-05-18
    相关资源
    最近更新 更多