你好,我知道numba有一个numba.typed.Dict,它是一个类型化的dict,但是我的dict的值是一个列表列表,该dict中的每个键的外部列表长度可能都不同;每个内部列表的长度也可能不同;内部列表的类型虽然是一对float32。我想知道numba是否支持这种结构以及如何声明它?
下面是字典的一个例子
{
“Seattle”: [[[1.2, 3.5], [4.5, 6.7]]],
“New York”:[ [[5.7, 22.4], [3.5, 7.8], [6.9, 4.1]], [[2.3, 4.5]]],
“Boston”: [[[2.4, 5.0]]]
}
region_polygons = Dict.empty(
key_type=types.unicode_type,
value_type= <------ try to figure out this )
答案 0 :(得分:2)
我们可以利用Typed Lists支持nesting的优势。我使用List(lsttype=...)
来手动指定不幸的是官方文档未显示的类型,但是请记住,“类型列表”目前是实验性功能(0.47版),在以后的发行版中可能会更改。>
>>> from numba.typed import Dict, List
>>> from numba.types import float32, unicode_type, ListType
>>> py_dct = {
... "Seattle": [[[1.2, 3.5], [4.5, 6.7]]],
... "New York":[ [[5.7, 22.4], [3.5, 7.8], [6.9, 4.1]], [[2.3, 4.5]]],
... "Boston": [[[2.4, 5.0]]]
... }
>>> nested_3 = ListType(ListType(ListType(float32)))
>>> nested_2 = ListType(ListType(float32))
>>> nested_1 = ListType(float32)
>>> nb_dct = Dict.empty(
... key_type=unicode_type,
... value_type=nested_3,
... )
>>> for city, lst in py_dct.items():
... out_lst = List(lsttype=nested_3)
... for outer in lst:
... mid_lst = List(lsttype=nested_2)
... for middle in outer:
... in_lst = List(lsttype=nested_1)
... for inner in middle:
... in_lst.append(inner)
... mid_lst.append(in_lst)
... out_lst.append(mid_lst)
... nb_dct[city] = out_lst
>>> nb_dct['Seattle']
ListType[ListType[ListType[float32]]]([[[1.2000000476837158, 3.5], [4.5, 6.699999809265137]]])
>>> nb_dct['New York']
ListType[ListType[ListType[float32]]]([[[5.699999809265137, 22.399999618530273], [3.5, 7.800000190734863], [6.900000095367432, 4.099999904632568]], [[2.299999952316284, 4.5]]])
>>> nb_dct['Boston']
ListType[ListType[ListType[float32]]]([[[2.4000000953674316, 5.0]]])