1 回答

TA贡献1815条经验 获得超6个赞
是否可以通过 njit 函数中的名称更改类变量?
不,目前(使用 numba 0.43.1)使用 nopython-mode numba 函数是不可能的。它在您的示例中不起作用的原因有两个:
在 nopython 模式下,numba 只支持非常有限的类。
numba.jitclass
不支持自定义类(除了)。setattr
numba 根本不支持(请参阅numba 文档中“支持的 Python 功能”中的“内置函数”部分)。
但是,如果您对如何设置自定义类的属性(但不是动态名称)感兴趣,您可以使用jitclass
:
import numba as nb
@nb.jitclass([('a', nb.float64)])
class A():
def __init__(self):
self.a = 0.0
@nb.njit
def test(instance):
instance.a = 1
A = A()
print(A.a)
test(A)
print(A.a)
请注意,如果您想使用自定义类,setattr那么我的建议是在 numba 函数之外执行此操作。Numba 非常适合数字运算和数组处理,但它不是通用工具!如果您想要一个更通用的工具,那么 Cython 可能会更好。
以我的经验:如果它不是关于循环并且不涉及数字或数组,那么不要指望 numba 更有效 - 这当然是过度简化但在过去为我提供了很好的指导(例如参见我的回答“什么时候 numba 有效?”)。
添加回答
举报