numba,带有nopython模式和词典的jitclass



尝试在使用JitClass时弄清楚如何跳过类方法。

具有相当大的递归模型(几乎是一个巨大的循环),而对于路径依赖性计算,它不能用直numpy进行矢量。

课程贯穿一系列的numpy阵列,通常具有numba友好的语法,但是我有一个部分以有序的方式调用一些方法:

def operations(self, i, ops_order_config):
    ops_dict = self.ops_dict
    for index in range(len(waterfall_config)):
        try:
            if isinstance(ops_config[index], tuple):
                ops_dict[ops_config[index][0]](i, ops_config[index][1])
            else:
                ops_dict[ops_config[index]](i)
        except KeyError:
            pass

该模型的这一部分对于灵活性至关重要 - "配置"是包含适当调用方法和相应参数的零件列表。OPS_DICT拥有实际的自我。从配置中调用,带有适当的参数。

如果我正在做一个jitclass,是否有任何方法可以跳过这个词典方面?

no,如果您制作一个 jitclass,则必须键入每个属性,并且词典或包含功能的列表/元组(即使jitted)不支持NUMBA 0.34。例如,尝试使用dictobject作为类型:

import numpy as np
from numba import jitclass
spec = [('dct', dict)]
@jitclass(spec)
class ClsWithObject(object):
    def __init__(self, value):
        self.dct = {}

投掷TypeError

TypeError:规格值应该是NUMBA类型实例,获得<class 'dict'>

此外,使用isinstance以及tryexcept在Nopython模式中不起作用。

您最好的选择是使用python类中调用的jit TED函数。

关于在numba汇编函数中使用字典,如Mseifert所说,Numba不支持这一点。在我自己的工作中,我遇到了这个问题,并在numba中发现了词典的实现(不是由我创建的),它的效果很好,它的github存储库可以在此处找到。

相关内容

  • 没有找到相关文章

最新更新