在我的代码中,有很多参数在运行期间是不变的。我定义了一个dict
类型变量来存储它们。但我发现numba
无法支持dict
。
有什么更好的解决方法?
答案 0 :(得分:2)
Numba在namedtuples
模式下支持nopython
,它应该是dict
的一个很好的替代方案,用于将大量参数传递给numba jitted函数。
答案 1 :(得分:2)
假设你有这样的函数,你可以通过属性而不是下标来访问它:
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)
这些不能取代字典的所有功能,但这些功能允许将“很多参数”作为一个实例传递。