gpt4 book ai didi

python - 在类中编写快速的Python代码;通过 self 论证产生的开销

转载 作者:太空宇宙 更新时间:2023-11-03 17:56:27 24 4
gpt4 key购买 nike

通过在类中传递 self 参数会产生开销吗?

我编写了一个类来拟合我的数据。类内部有几个辅助函数,它们一起形成拟合方程组。方便的是可重用性,我可以做类似 myclass.get_data()my_class.fit_data() 等的事情。但是,我担心我的方式实现我的代码可能会产生开销(某些函数被调用大约 50000 次)。例如:

以下函数计算我的系统中的一个变量:

def get_qs(self,x,cp,cs):
qs = fsolve(self.make_qs,50.,args = (x,cp,cs))
return(qs)

它调用make_qs:

def make_qs(self,qs,x,cp,cs):
q0 = x[3*self.n_comp]
# generates the implicit equation for qs (capacity of salt)
denom = self.get_denom(qs,x,cp,cs)
F = q0*cs/denom - qs
return(F)

它本身调用get_denom

def get_denom(self,qs,x,cp,cs):
k = x[0:self.n_comp]
sigma = x[self.n_comp:2*self.n_comp]
z = x[2*self.n_comp:3*self.n_comp]
# calculates the denominator in Equ 14a - 14c (Brooks & Cramer 1992)
a = (sigma + z)*( k*(qs/cs)**(z-1) )*cp
denom = np.sum(a) + cs
return denom

我考虑过用 Fortran 语言编写函数,然后将最终结果传递给 Python 中的成本函数。

最佳答案

如果您担心性能,您应该:

  • 分析您的代码。查看哪些函数占用了最多时间并尝试优化它们(或应用一些优化技巧,请查看第三个项目符号)。
  • 在您的情况下,您特别关心 self 参数的开销,如果您愿意,可以指定 @classmethod 装饰器来消除 self 的需要。您现在可以调用您的函数:MyClass.make_qs(*args),...
  • 因为您有计算结果,所以我认为您应该查看 memoization 。也许您正在重新计算已经计算过的东西。 (在我看来,超过 50k 的函数调用是昂贵的)。

我认为传递 self 会产生非常非常非常非常非常低的开销,即使对于超过 50k+ 的调用也是如此,因为看看 Python 中的 Web 应用程序,它们使用的不是一个而是很多类( “自身开销”),并且它们可以非常快速地处理数十亿个请求。

关于python - 在类中编写快速的Python代码;通过 self 论证产生的开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28395521/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com