gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:52:18 24 4
gpt4 key购买 nike

在以下类方法的运行(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 类型

我怎样才能让它发挥作用?

最佳答案

如果您处于 nopython 模式,numba 必须支持每个变量的类型。 Python 中的非静态方法采用 self 参数,只要您不使用 jitclass ,那么 self 的类型就不是nopython 模式不支持,因此无法像那样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

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)

关于python - 看似简单的类方法的类型推断错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47930955/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com