在我的代碼中,有很多參數在運行過程中保持不變。我定義了一個dict
類型變量來存儲它們。但我發現numba
不支持dict
。將numba的字典類型替換爲python函數的參數
什麼是解決此問題的更好方法?
在我的代碼中,有很多參數在運行過程中保持不變。我定義了一個dict
類型變量來存儲它們。但我發現numba
不支持dict
。將numba的字典類型替換爲python函數的參數
什麼是解決此問題的更好方法?
Numba支持namedtuples
的nopython
模式,這應該是dict
的一個很好的替代方案,用於將大量參數傳遞給numba jitted函數。
假設你有這樣的功能,你的罰款通過訪問它的屬性,而不是通過下標:
import numba as nb
@nb.njit
def func(config):
return config.c
你可以使用一個collections.namedtuple
這裏(如@JoshAdel提到):
import numpy as np
from collections import namedtuple
conf = namedtuple('conf', ['a', 'b', 'c'])
func(conf(1, 2.0, np.array([1,2,3], dtype=np.int64)))
# array([1, 2, 3], dtype=int64)
還是一個jitclass:
spec = [('a', nb.int64),
('b', nb.float64),
('c', nb.int64[:])]
@nb.jitclass(spec)
class Conf:
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
func(Conf(1, 2.0, np.array([1,2,3], dtype=np.int64)))
# array([1, 2, 3], dtype=int64)
這些不能代替所有字典的功能,但是這些允許作爲一個例子傳遞「很多參數」。
您可以添加一點更多的上下文,以便它實際上明顯是什麼意思,什麼不工作,以及它應該如何工作:) – MSeifert
好的,我會補充。我使用字典來減少函數中的參數數量。我希望用'numba'加快函數的速度,但'numba'不支持字典類型。 – WZhao