Python 非类型化全局名称';pvc sim卡';:无法确定一种类型的<;类别';skfuzzy.control.controlsystem.ControlSystemSimulation'&燃气轮机;

Python 非类型化全局名称';pvc sim卡';:无法确定一种类型的<;类别';skfuzzy.control.controlsystem.ControlSystemSimulation'&燃气轮机;,python,numba,skfuzzy,Python,Numba,Skfuzzy,获取以下代码的错误: @vectorize(["float32(float32, float32, float32, float32)"], target='cuda') def fuzz_comp(A_row, B_col, X, Y): for i in range(A_row): for j in range(B_col): pvc_sim.input['ipv'] = float(X[i,j]) pvc_sim.co

获取以下代码的错误:

@vectorize(["float32(float32, float32, float32, float32)"], target='cuda')
def fuzz_comp(A_row, B_col, X, Y):
    for i in range(A_row):
        for j in range(B_col):
            pvc_sim.input['ipv'] = float(X[i,j])
            pvc_sim.compute()
            Y[i,j] = pvc_sim.output['opv']
    return Y
错误:

TypingError: Failed in nopython mode pipeline (step: nopython frontend)
Untyped global name 'pvc_sim': cannot determine Numba type of <class 'skfuzzy.control.controlsystem.ControlSystemSimulation'>

File "<ipython-input-13-4fe6c3f24f69>", line 5:
def fuzz_comp(A_row, B_col, X, Y):
    <source elided>
        for j in range(B_col):
            pvc_sim.input['ipv'] = float(X[i,j])
            ^
TypingError:在nopython模式管道中失败(步骤:nopython前端)
非类型化全局名称“pvc_sim”:无法确定
文件“”,第5行:
def模糊组件(A行、B列、X、Y):
对于范围内的j(B_col):
pvc模拟输入['ipv']=浮点数(X[i,j])
^

然而,通读了许多文章,却无法解决这个问题。然而,代码是用Python编写的;使用decorator时返回错误。我正在尝试在GPU中实现模糊计算

错误告诉您的是,numba不知道如何键入全局变量
pvc_sim
。它似乎是一个python类,因此numba无法自动将其转换为低级代码。您可以编写一个专门的,但否则,此代码将失败。此外,我还不清楚该实施是否会从cuda目标中受益。请记住,
@vectorize
函数被编写为在标量上操作,然后numba正确处理数组输入,将函数应用于每个元素。

多亏了。我能够开发以下用于输入和输出成员函数的代码

spec = [
    ('value', int64),               # a simple scalar field
    ('array', float64[:]),          # an array field
]

@jitclass(spec)
class io_mf(object):
    def __init__(self, value, array):
        self.value = value
        self.array = array

    @property
    def triangular(self):
        if (self.array[0] - self.array[1]) <= self.value and self.value < self.array[0]:
            return 1. - (self.array[0] - self.value) / self.array[1]
        if self.array[0] <= self.value and self.value <= (self.array[0] + self.array[2]):
            return 1. - (self.value - self.array[0]) / self.array[2]
        return 0.

    @property
    def trapezoidal(self):
        if (self.array[0] - self.array[2]) <= self.value and self.value < self.array[0]:
            return 1. - (self.array[0] - self.value) / self.array[2]
        if self.array[0] <= self.value and self.value < self.array[1]: 
            return 1.
        if self.array[1] <= self.value and self.value <= (self.array[1] + self.array[3]):
            return 1. - (self.value - self.array[1]) / self.array[3]
        return 0
spec=[
('value',int64),#一个简单的标量字段
('array',float64[:]),#一个数组字段
]
@JIT等级(规范)
类io_mf(对象):
定义初始化(自、值、数组):
自我价值=价值
self.array=array
@财产
def三角形(自身):
if(self.array[0]-self.array[1])