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 有效?”)。
添加回答
舉報