在以下类方法的运行(numba编译)期间:
@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的Numba类型
我怎样才能让它发挥作用?
答案 0 :(得分:1)
如果您处于nopython
模式,则numba必须支持每个变量的类型。 Python中的非静态方法采用self
参数,只要您不使用jitclass
,self
模式就不支持nopython
类型这使jit
不可能像那样。
但是你可以用unjitted方法和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)