美好的一天,我正在为一些数字工作编写一个 Python 模块。由于发生了很多事情,我最近几天一直在优化代码以缩短计算时间。但是,我有一个关于 Numba 的问题。基本上,我有一个包含一些字段的类,这些字段是 numpy 数组,我通过以下方式对其进行初始化:
def init(self):
a = numpy.arange(0, self.max_i, 1)
self.vibr_energy = self.calculate_vibr_energy(a)
def calculate_vibr_energy(i):
return numpy.exp(-self.harmonic * i - self.anharmonic * (i ** 2))
因此,代码是矢量化的,并且使用 Numba 的 JIT 会带来一些改进。但是,有时我需要从类外部访问 calculate_vibr_energy 函数,并传递一个整数而不是数组来代替 i。据我了解,如果我在 calculate_vibr_energy 上使用 Numba 的 JIT,它必须始终将数组作为参数。
那么,以下哪个选项更好: 1) 创建一个新函数 calculate_vibr_energy_single(i),它只接受一个整数,并在其上使用 Numba 2) 替换与此类似的函数的所有用法:
myclass.calculate_vibr_energy(1)
有了这个:
tmp = np.array([1])
myclass.calculate_vibr_energy(tmp)[0]
还是有其他更有效(或至少更 Python-ic)的方法来做到这一点?