亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

是否可以通過 njit 函數中的名稱更改類變量?

是否可以通過 njit 函數中的名稱更改類變量?

夢里花落0921 2022-01-11 19:38:12
我試圖通過它的名字來修改一個類的變量,所以基本上我所做的就是調用setattr函數。我的問題是當我試圖用numba njit裝飾器做到這一點時,它不再起作用了。那么有沒有辦法在里面做同樣的事情numba?import numba as nbclass A():    def __init__(self):        self.a [email protected]()def test(A,s):    setattr(A,s,1)A = A()s = 'a'print(A.a)test(A,s)print(A.a)更新是否可以test在@nb.njit裝飾器之外的函數中調用函數。在下面的例子中,var_update(A,s,1)函數無法編譯?import numba as nbclass A():    def __init__(self):        self.a =0.    def set_a(self,a):        [email protected]()def test(A,s):    var_update(A,s,1) # this function could not be compiled?def var_update(Obj, s , val):    setattr(Obj,s,val)CA = A()s = 'a'print(CA.a)test(CA,s)print(CA.a)
查看完整描述

1 回答

?
紅糖糍粑

TA貢獻1815條經驗 獲得超6個贊

是否可以通過 njit 函數中的名稱更改類變量?

不,目前(使用 numba 0.43.1)使用 nopython-mode numba 函數是不可能的。它在您的示例中不起作用的原因有兩個:

但是,如果您對如何設置自定義類的屬性(但不是動態名稱)感興趣,您可以使用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 有效?”)。


查看完整回答
反對 回復 2022-01-11
  • 1 回答
  • 0 關注
  • 230 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號