尝试在使用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。例如,尝试使用dict
或object
作为类型:
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
以及try
和except
在Nopython模式中不起作用。
您最好的选择是使用python类中调用的jit
TED函数。
关于在numba汇编函数中使用字典,如Mseifert所说,Numba不支持这一点。在我自己的工作中,我遇到了这个问题,并在numba中发现了词典的实现(不是由我创建的),它的效果很好,它的github存储库可以在此处找到。