Я использую версию 0.45.1
.Вы можете просто передать словарь, не объявляя тип в словаре:
d = Dict.empty(
key_type=types.unicode_type,
value_type=types.float64[:],
)
d['k1'] = np.arange(5) + 1.0
d['k2'] = np.arange(5) + 11.0
# Numba will infer the type on it's own.
@njit
def somefunction2(d):
prod = 1
# I am assuming you want sum of second array and product of second
result = (d['k2'].sum(), d['k1'].prod())
return result
print(somefunction(d))
# Output : (65.0, 120.0)
Для справки вы проверяете этот пример из официальной документации.
Обновление :
В вашем случае вы можете просто позволить jit
выводить типы самостоятельно, и это должно работать, у меня работает следующий код:
import numpy as np
from numba import njit
from numba import types
from numba.typed import Dict
from numba.types import DictType
# Let jit infer the types on it's own
@njit
def somefunction(lst_arr, mydict):
arr1, arr2 = lst_arr
summ = 0
prod = 1
for i in arr2:
summ += i
for j in arr1:
prod *= j
result = (summ*mydict['k1'],prod*mydict['k2'])
return result
# ~~ Input numpy arrays
a = np.arange(5)+1.0
b = np.arange(10)+11.0 #<--------------- This is of different shape
arg = (a,b)
# ~~ Input dictionary for the function
d = Dict.empty(
key_type=types.unicode_type,
value_type=types.float64)
d['k1'] = 1.5
d['k2'] = 0.5
# This works now
print(somefunction(arg, d))
Вы можете видетьофициальная документация здесь :
Если в этом нет необходимости, рекомендуется разрешить Numba выводить типы аргументов, используя вариант без подписи @ jit.
Я пробовал разные методы, но это единственный, который работал для указанной вами проблемы.