看似简单的类方法的类型推断错误

2024-09-29 23:26:03 发布

您现在位置:Python中文网/ 问答频道 /正文

在运行(编译)以下类方法时:

@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的类型

我该怎么做?你知道吗


Tags: the方法inselftrue类型isdef
1条回答
网友
1楼 · 发布于 2024-09-29 23:26:03

如果处于nopython模式,则numba必须支持每个变量的类型。Python中的非静态方法采用self参数,只要您不使用jitclass,那么self类型在nopython模式下就不受支持,这使得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)

相关问题 更多 >

    热门问题