什么';使用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)