如何在numba中声明值是嵌套列表的类型化Dict

时间:2019-10-31 06:19:19

标签: python numpy numba

你好,我知道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 )

1 个答案:

答案 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]]])