在scipy编织中使用什么代替全局变量?

时间:2014-04-28 11:43:28

标签: python c scipy

我正在通过很多参数描述力场中某些粒子的动力学模拟。

如果我在C或Fortran中这样做,我会将这些参数定义为全局变量(最方便)。在这里,当我使用scipy编织时,我必须将它们作为函数的参数传递。我不喜欢,因为我每次添加或删除参数时都必须编辑许多函数的标题。此外,由于传递了许多参数(这是性能关键的紧密循环),函数的调用可能会变慢。

例如,在以下代码中,参数k, x_surf, C6, C12, CQ, zeta, e0T1, beta 一次又一次地在多个相关函数的标头中传递

inline double getForce( 
    double x, double Q,   
    double k, double x_surf, double C6, double C12, double CQ, double zeta, double e0
){ ... }

inline void move( 
    double dt, double imass, double T1, double beta,   
    double k,  double x_surf, double C6, double C12, double CQ, double zeta, double e0,        
    double &x, double &v, double &Q 
){
   ...
   double f = getForce( x, Q,     k, x_surf, C6, C12, CQ, zeta, e0 );
   ...
}

void trj2buff( 
    double dt, int nsteps, double mass, double T1, double beta,    
    double k, double x_surf, double C6, double C12, double CQ, double zeta, double e0,         
    double  x_start, double  v_start, double  Q_start,
    double* x_buff,  double* v_buff,  double* Q_buff 
){
   ...
   move( dt, imass,  T1, beta,     k, Q, x_surf, C6, C12, CQ, zeta, e0,        x, v, Q );
   ...
}

一种解决方案可能是将所有参数作为单个double*缓冲区传递(但它会降低代码的可读性,因为它会点头命名)。或者更好地作为用户定义struct{}。但是我不清楚如何在这种情况下使用struct{}进行scipy编织。

0 个答案:

没有答案