Ошибка Numba, AttributeError: у объекта 'Array' нет атрибута '__defaults__' - PullRequest
1 голос
/ 27 апреля 2020

Я пытаюсь оптимизировать некоторый код, точнее функцию, использующую Numba, @jit. Однако я сталкиваюсь с некоторыми ошибками, которые не могу преодолеть. Пожалуйста, найдите код и ошибку вывода ниже. Ввод uint8 и 2 измерения. Я работаю на Ma c ОС Catalina 10.15.4, Numpy 1.15.2, Numba 0.39.0. Код:

@jit(numba.uint8[:,:],parallel=True, nopython=True, nogil=True)
def flowaccumulation(flowdir):
    nr=flowdir.shape[0]
    nc=flowdir.shape[1]
    shape=(nr,nc)
    accumulation=np.zeros(shape)
    for i in prange(nr):
        for j in range(nc):
            if flowdir[i,j]==0:
               accumulation[i,j]=0
            else:
                tempi=i
                tempj=j

                while tempj!=-1 and tempj!=nc and tempi!=-1 and tempi!=nr and flowdir[tempi,tempj]!=0:
                    if flowdir[tempi,tempj]==1:
                        movej=1
                        movei=0
                        accumulation[tempi,tempj]=accumulation[tempi,tempj]+1
                        if flowdir[tempi+movei,tempj+movej]==16:
                            break
                    elif flowdir[tempi,tempj]==2:
                        movej=1
                        movei=1
                        accumulation[tempi,tempj]=accumulation[tempi,tempj]+1
                        if flowdir[tempi+movei,tempj+movej]==32:
                            break
                    elif flowdir[tempi,tempj]==4:
                        movej=0
                        movei=1
                        accumulation[tempi,tempj]=accumulation[tempi,tempj]+1
                        if flowdir[tempi+movei,tempj+movej]==64:
                            break
                    elif flowdir[tempi,tempj]==8:
                        movej=-1
                        movei=1
                        accumulation[tempi,tempj]=accumulation[tempi,tempj]+1
                        if flowdir[tempi+movei,tempj+movej]==128:
                            break
                    elif flowdir[tempi,tempj]==16:
                        movej=-1
                        movei=0
                        accumulation[tempi,tempj]=accumulation[tempi,tempj]+1
                        if flowdir[tempi+movei,tempj+movej]==1:
                            break
                    elif flowdir[tempi,tempj]==32:
                        movej=-1
                        movei=-1
                        accumulation[tempi,tempj]=accumulation[tempi,tempj]+1
                        if flowdir[tempi+movei,tempj+movej]==2:
                            break
                    elif flowdir[tempi,tempj]==64:
                        movej=0
                        movei=-1
                        accumulation[tempi,tempj]=accumulation[tempi,tempj]+1
                        if flowdir[tempi+movei,tempj+movej]==4:
                            break
                    elif flowdir[tempi,tempj]==128:
                        movej=1
                        movei=-1
                        accumulation[tempi,tempj]=accumulation[tempi,tempj]+1
                        if flowdir[tempi+movei,tempj+movej]==8:
                            break

                    tempi=tempi+movei
                    tempj=tempj+movej


    return accumulation

выход:

  File "/Users/nina/opt/anaconda3/envs/floods/lib/python3.5/site-packages/numba/dispatcher.py", line 183, in __init__
    default_values = self.py_func.__defaults__ or ()

AttributeError: 'Array' object has no attribute '__defaults__'
...