如何解决使用numpy进行numba编译有什么问题?
我无法编译此代码:
body: LayoutBuilder(
builder: (BuildContext context,BoxConstraints constraint) {
return SingleChildScrollView(
child: ConstrainedBox(
constraints: BoxConstraints(minHeight: constraint.maxHeight),child: IntrinsicHeight(
child: Container(
[...]
)
)
)
);
});
它引发:
由于启用了函数“ GaborWavelet”,类型推断由于以下原因而导致类型推断失败:由于未找到函数Function()的签名实现,
array(array(array(float64,1d,C),dtype = class(complex128))
有2种候选实现: -由于以下原因,其中2个不匹配: 函数'array'中的重载:文件:numba \ core \ typing \ npydecl.py:504行。 带参数:'(array(float64,1d,C),dtype = class(complex128))': 由于实现引发了特定错误而被拒绝: TypingError:均质序列中不允许使用array(float64、1d,C)
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 = np.array(c2*(t * c3)**2,dtype = np.complex128)
res.imag = omega*t
return c1*np.exp(res)
我怎么了?
如何编译此代码(内部包含numpy方法)?
解决方法
Numba不支持您使用的两种功能,而是等效选项:
-
通过
np.array(arr,dtype=type)
进行类型转换。 而是使用arr.astype(type)
。 -
为复杂的数据类型设置
arr.imag=values
。而是使用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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。