将numba的dict类型替换为python函数的参数

时间:2017-09-01 15:07:33

标签: python numba

在我的代码中,有很多参数在运行期间是不变的。我定义了一个dict类型变量来存储它们。但我发现numba无法支持dict

有什么更好的解决方法?

2 个答案:

答案 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)

这些不能取代字典的所有功能,但这些功能允许将“很多参数”作为一个实例传递。