用于向量化函数的Python和Numba

用于向量化函数的Python和Numba,python,arrays,numpy,numba,Python,Arrays,Numpy,Numba,你好,我正在为一些数字工作编写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_ene

你好,我正在为一些数字工作编写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)的方法吗?

我只玩过一点numba,所以我可能弄错了,但据我所知,使用“autojit”修饰符应该会给出可以接受任何类型参数的函数


参见,例如

他指的是麻木。numba是一个适用于numpy的JIT编译器:第三个选项是传递长度为1的数组,而不是整数。谢谢!这似乎是做这件事的最简单的方法(并且可读性友好)。