将 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" 作为一个实例传入。