将 numba 的字典类型替换为 python 函数的参数
Replacement of dict type for numba as parameters of a python function
在我的代码中,有很多参数在运行期间是不变的。我定义了一个 dict
类型的变量来存储它们。但是我发现numba
不支持dict
。
解决这个问题的更好方法是什么?
Numba 在 nopython
模式下支持 namedtuples
,这应该是 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)
这些不能替代字典的所有功能,但它们允许 "a lot of parameters" 作为一个实例传入。
在我的代码中,有很多参数在运行期间是不变的。我定义了一个 dict
类型的变量来存储它们。但是我发现numba
不支持dict
。
解决这个问题的更好方法是什么?
Numba 在 nopython
模式下支持 namedtuples
,这应该是 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)
这些不能替代字典的所有功能,但它们允许 "a lot of parameters" 作为一个实例传入。