2024-09-29 23:26:03 发布
网友
在运行(编译)以下类方法时:
@jit(nopython=True) def isInPosition(self): """Returns whether the axis is in the desired position.""" return True if self.state & 0x04 else False
我收到类型推断错误消息:
无法确定类X.X的类型
我该怎么做?你知道吗
如果处于nopython模式,则numba必须支持每个变量的类型。Python中的非静态方法采用self参数,只要您不使用jitclass,那么self类型在nopython模式下就不受支持,这使得jit不可能这样。你知道吗
nopython
self
jitclass
jit
但是,您可以使用非直接方法和jitted函数重构它:
import numba as nb @nb.njit def _is_in_position(state): return bool(state & 0x04) class Fun: def __init__(self, state): self.state = state def is_in_position(self): return _is_in_position(self.state)
您还可以检查它是否更快如果在对象模式下jit使用方法,也许它可以内联内部函数调用:
import numba as nb @nb.njit def _is_in_position(state): return bool(state & 0x04) class Fun: def __init__(self, state): self.state = state @nb.jit def is_in_position(self): return _is_in_position(self.state)
根据类的不同,可以将其设置为jitclass(但是jitclass要求所有类型都使用支持的类型,因此您很可能无法做到这一点):
import numba as nb spec = [ ('state', nb.int64), ] @nb.jitclass(spec) class Fun(object): def __init__(self, state): self.state = state def is_in_position(self): return bool(self.state & 0x04)
如果处于
nopython
模式,则numba必须支持每个变量的类型。Python中的非静态方法采用self
参数,只要您不使用jitclass
,那么self
类型在nopython
模式下就不受支持,这使得jit
不可能这样。你知道吗但是,您可以使用非直接方法和jitted函数重构它:
您还可以检查它是否更快如果在对象模式下
jit
使用方法,也许它可以内联内部函数调用:根据类的不同,可以将其设置为jitclass(但是jitclass要求所有类型都使用支持的类型,因此您很可能无法做到这一点):
相关问题 更多 >
编程相关推荐