我试图在一个类实例方法中进行一些曲线拟合,而曲线拟合函数给了我的类实例方法太多的参数。在
代码是
class HeatData(hx.HX):
"""Class for handling data from heat exchanger experiments."""
然后是几行工作正常的方法,那么我的功能是:
^{pr2}$曲线拟合函数调用
def set_flow_array(self):
"""Sets experimental flow rate through heat exchanger"""
flow = self.flow_data.flow
pressure_drop = self.flow_data.pressure_drop
popt, pcov = spopt.curve_fit(self.get_flow, pressure_drop, flow)
self.exh.flow_coeff = popt
self.exh.flow_array = ( self.exh.flow_coeff * self.exh.pressure_drop**0.5 )
给出错误
get_flow() takes exactly 2 arguments (3 given)
我可以通过在类之外定义get_flow并这样调用它来实现它:
spopt.curve_fit(get_flow, pressure_drop, flow)
但这并不好,因为它确实需要是类中的一个方法,才能像我所希望的那样通用。如何将此工作作为类实例方法获得?在
我也希望能够通过self得到_flow,给它更多的参数,而不是曲线拟合使用的拟合参数。这可能吗?在
如果在
HeatData
类中定义get_flow
,则必须将self
作为第一个参数:def get_flow(self, pressure_drop, coeff):
编辑:在寻找曲线拟合的定义后,ifound that the prototype is
curve_fit(f, xdata, ydata, p0=None, sigma=None, **kw)
,因此第一个参数必须是可调用的,它将以第一个参数作为自变量进行调用: 尝试关闭:尝试删除“自我”并拨打电话:
spopt.curve_fit(get_flow, pressure_drop, flow)
不幸的是,也许曲线拟合有缺陷。曲线拟合使用inspect来确定起始值的数目,如果有额外的
self
,那么这个值就会被混淆或误导。在所以我想,给一个起始值应该可以避免这个问题。但是,在这种情况下也有一个isscalar(p0),我不知道为什么,我认为最好将其报告为问题或bug:
编辑:避免标量作为起始值
^{pr2}$表示如果起始值定义为[…],则只有1个参数的示例有效,例如类似于下面的示例:
有两个参数和给定起始值的示例可以避免inspect调用,并且一切正常:
编辑:这个错误已经被修复,所以如果你有一个新版本的scipy,那么绑定方法现在可以作为曲线拟合的第一个参数传递。
Commit of bug fix submission on github
相关问题 更多 >
编程相关推荐