Numba、带 nopython 模式和字典的 Jitclass
Numba, Jitclass w/ nopython mode and dictionaries
试图找出如何在使用 jitclass 时跳过 class 方法。
有一个相当大的递归模型(几乎是一个巨大的 for 循环),它 - 给定路径相关的计算,不能用直接的 Numpy 向量化。
class 遍历一系列 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
模型的这一部分对于灵活性非常重要 - "config" 是一个有序的元组列表,其中包含要调用的适当方法以及相应的参数。 ops_dict 包含实际的自我。这是从配置中调用的,具有适当的参数。
如果我正在做一个 jitclass,有什么办法可以跳过这个字典方面的 jit 吗?
不,如果您创建 jitclass
每个属性都必须输入,并且从 numba 0.34 开始不支持包含函数(即使已编译)的字典或 lists/tuples。例如尝试使用 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: spec values should be Numba type instances, got <class 'dict'>
此外,使用 isinstance
以及 try
和 except
在 nopython 模式下也不起作用。
您最好的选择是使用从纯 Python class.
中调用的 jit
ted 函数
关于在Numba编译函数中使用Dictionaries,正如MSeifert所说,Numba不支持这个。在我自己的工作中,我已经 运行 解决了这个问题,并在 Numba 中找到了一个很好用的字典实现(不是我创建的),可以找到它的 GitHub 存储库 here。
试图找出如何在使用 jitclass 时跳过 class 方法。
有一个相当大的递归模型(几乎是一个巨大的 for 循环),它 - 给定路径相关的计算,不能用直接的 Numpy 向量化。
class 遍历一系列 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
模型的这一部分对于灵活性非常重要 - "config" 是一个有序的元组列表,其中包含要调用的适当方法以及相应的参数。 ops_dict 包含实际的自我。这是从配置中调用的,具有适当的参数。
如果我正在做一个 jitclass,有什么办法可以跳过这个字典方面的 jit 吗?
不,如果您创建 jitclass
每个属性都必须输入,并且从 numba 0.34 开始不支持包含函数(即使已编译)的字典或 lists/tuples。例如尝试使用 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: spec values should be Numba type instances, got
<class 'dict'>
此外,使用 isinstance
以及 try
和 except
在 nopython 模式下也不起作用。
您最好的选择是使用从纯 Python class.
中调用的jit
ted 函数
关于在Numba编译函数中使用Dictionaries,正如MSeifert所说,Numba不支持这个。在我自己的工作中,我已经 运行 解决了这个问题,并在 Numba 中找到了一个很好用的字典实现(不是我创建的),可以找到它的 GitHub 存储库 here。