什么';使用numpy编译有什么问题?

什么';使用numpy编译有什么问题?,numpy,jit,numba,Numpy,Jit,Numba,我无法编译此代码: 将numpy导入为np 进口麻木 从numba导入jit、浮点64、复数128 输入数学 @jit(complex128[:](float64,float64[:],float64)) def GaborWavelet(ω,t,Gabor_系数): c1=0.3251520240633*数学平方比(ω) c2=-0.5*Gabor_系数 c3=ω*0.187390625129278 res=np.array(c2*(t*c3)**2,dtype=np.complex128)

我无法编译此代码:

将numpy导入为np
进口麻木
从numba导入jit、浮点64、复数128
输入数学
@jit(complex128[:](float64,float64[:],float64))
def GaborWavelet(ω,t,Gabor_系数):
c1=0.3251520240633*数学平方比(ω)
c2=-0.5*Gabor_系数
c3=ω*0.187390625129278
res=np.array(c2*(t*c3)**2,dtype=np.complex128)
res.imag=ω*t
返回c1*np.exp(分辨率)
它提出:

编译正在退回到启用循环提升的对象模式,因为函数“GaborWavelet”未能进行类型推断,原因是:未找到签名函数()的实现:

数组(数组(float64,1d,C),dtype=class(complex128))

有两种候选实现: -其中2个不匹配,原因是: 函数“array”中的重载:文件:numba\core\typing\npydecl.py:第504行。 带参数:“(数组(float64,1d,C),dtype=class(complex128)): 已拒绝,因为实现引发了特定错误: TypingError:齐次序列中不允许使用数组(float64,1d,C)

res = np.array(c2*(t * c3)**2, dtype = np.complex128)
^
我错了什么


如何编译此代码(内部包含numpy方法)?

Numba不支持您使用的两种方法,但支持等效选项:

  • 通过
    np.array(arr,dtype=Type)
    进行类型转换。 改用
    arr.astype(type)

  • 为复杂数据类型设置
    arr.imag=value
    。而是使用
    arr+=values*1j

  • 以下代码在我的机器上工作,并应产生相同的结果:

    import numpy as np
    import numba
    from numba import jit, float64, complex128
    import math
    
    @jit(complex128[:](float64,float64[:],float64))
    def GaborWavelet(omega, t, Gabor_coef):
    
        c1 = 0.3251520240633*math.sqrt(omega)
        c2 = -0.5*Gabor_coef
        c3 = omega*0.187390625129278
    
        res = (c2*(t * c3)**2).astype(np.complex128)
        res += omega*t*1j
    
        return c1*np.exp(res)