在 Numba 中使用元组值创建一个空的 TypedDict

问题描述 投票:0回答:1

我想用字符串键和异构元组值初始化一个字典。这就是我所拥有的。有什么想法..?

from numba import types, typed, njit, typeof, from_dtype

TypeMyTuple = types.Tuple([types.unicode_type, types.float16, types.int16])

my_dict = typed.Dict.empty(key_type=types.unicode_type, value_type=TypeMyTuple)

错误:

Traceback (most recent call last):
  File "/home/me/.pycharm_helpers/pydev/pydevconsole.py", line 364, in runcode
    coro = func()
           ^^^^^^
  File "<input>", line 8, in <module>
  File "/home/me/.pyenv/versions/3.11.1/envs/my_env/lib/python3.11/site-packages/numba/typed/typeddict.py", line 105, in empty
    return cls(dcttype=DictType(key_type, value_type), n_keys=n_keys)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/me/.pyenv/versions/3.11.1/envs/my_env/lib/python3.11/site-packages/numba/typed/typeddict.py", line 120, in __init__
    self._dict_type, self._opaque = self._parse_arg(**kwargs)
                                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/me/.pyenv/versions/3.11.1/envs/my_env/lib/python3.11/site-packages/numba/typed/typeddict.py", line 156, in _parse_arg
    opaque = _make_dict(dcttype.key_type, dcttype.value_type,
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/me/.pyenv/versions/3.11.1/envs/my_env/lib/python3.11/site-packages/numba/core/dispatcher.py", line 468, in _compile_for_args
    error_rewrite(e, 'typing')
  File "/home/me/.pyenv/versions/3.11.1/envs/my_env/lib/python3.11/site-packages/numba/core/dispatcher.py", line 409, in error_rewrite
    raise e.with_traceback(None)
numba.core.errors.TypingError: Failed in nopython mode pipeline (step: nopython frontend)
No implementation of function Function(<function new_dict at 0x7f78a6293920>) found for signature:
 
 >>> new_dict(typeref[unicode_type], typeref[Tuple(unicode_type, float16, int16)], n_keys=int64)
 
There are 2 candidate implementations:
  - Of which 2 did not match due to:
  Overload in function 'impl_new_dict': File: numba/typed/dictobject.py: Line 653.
    With argument(s): '(typeref[unicode_type], typeref[Tuple(unicode_type, float16, int16)], n_keys=int64)':
   Rejected as the implementation raised a specific error:
     LoweringError: Failed in nopython mode pipeline (step: native lowering)
   float16
   
   File "../../../../../../home/me/.pyenv/versions/3.11.1/envs/my_env/lib/python3.11/site-packages/numba/typed/dictobject.py", line 671:
       def imp(key, value, n_keys=0):
           <source elided>
               raise RuntimeError("expecting *n_keys* to be >= 0")
           dp = _dict_new_sized(n_keys, keyty, valty)
           ^
   
   During: lowering "dp = call $48load_global.0(n_keys, $62load_deref.3, $64load_deref.4, func=$48load_global.0, args=[Var(n_keys, dictobject.py:668), Var($62load_deref.3, dictobject.py:671), Var($64load_deref.4, dictobject.py:671)], kws=(), vararg=None, varkwarg=None, target=None)" at /home/me/.pyenv/versions/3.11.1/envs/my_env/lib/python3.11/site-packages/numba/typed/dictobject.py (671)
  raised from /home/me/.pyenv/versions/3.11.1/envs/my_env/lib/python3.11/site-packages/numba/core/errors.py:846
During: resolving callee type: Function(<function new_dict at 0x7f78a6293920>)
During: typing of call at /home/me/.pyenv/versions/3.11.1/envs/my_env/lib/python3.11/site-packages/numba/typed/typeddict.py (23)
File "../../../../../../home/me/.pyenv/versions/3.11.1/envs/my_env/lib/python3.11/site-packages/numba/typed/typeddict.py", line 23:
def _make_dict(keyty, valty, n_keys=0):
    return dictobject._as_meminfo(dictobject.new_dict(keyty, valty,
    ^

非常感谢

(Lorem ipsum dolor sat amet,consectetur adipiscing elit,sed do eiusmod tempor incididunt ut Labore et dolore magna aliqua。Ut enim ad minim veniam,quis nostrud exeritation ullamco Laboris nisi ut aliquip ex ea commodo consequat。Duis aute irure dolor in reprehenderit voluptate velit esse cillum dolore eu fugiat nulla pariatur.Exceteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est labourum.)

python numba
1个回答
0
投票

Soln:将数据类型从 16 位更改为 32 位。

© www.soinside.com 2019 - 2024. All rights reserved.