【问题标题】:Use NumPy array as key in Numba TypedDict在 Numba TypedDict 中使用 NumPy 数组作为键
【发布时间】:2020-04-18 20:30:45
【问题描述】:

我正在尝试修改一个类以使用 Numba 的 @jitclass,并且该类的一部分需要使用字典将 NumPy 数组映射到 int 值。我一直使用数组的tobytes 方法作为键,但 Numba 不支持此方法。是否有任何兼容 Numba 的方法来使用 NumPy 数组键入字典? Numba 似乎也不支持数组的字符串方法。

【问题讨论】:

  • 向我们展示您尝试过的 Numba 拒绝的代码。
  • 不幸的是,我并没有相关的代码可以发布比原始帖子更多的信息,在尝试的事情上有点茫然

标签: python numpy numba


【解决方案1】:

如果您的 NumPy 数组不更改内存地址,您可以根据指向其内存地址的指针创建密钥。请注意,这仅适用于要就地修改数组的情况:

>>> import numpy as np
>>> arr = np.arange(3)
>>> arr
array([0, 1, 2])
>>> ptr, _ = arr.__array_interface__['data']
>>> ptr
140556718588416
>>> dct = {ptr: arr}
>>> dct[ptr]
array([0, 1, 2])
>>> arr += 10
>>> dct[ptr]
array([10, 11, 12])
>>> arr[...] = 0
>>> dct[ptr]
array([0, 0, 0])

但是如果你真的改变了数组的内存位置,就会遇到bug:

>>> arr = np.ones_like(arr)
>>> arr
array([1, 1, 1])
>>> dct[ptr] # oops!
array([0, 0, 0])

【讨论】:

    【解决方案2】:

    如果没有太多信息可以继续,我建议首先将您的数组映射到一个中间字典,如下所示:

    list_of_arrays = [arr1, arr2, arr3]
    intermediate_dict = {x:y for x,y in enumerate(list_of_arrays)}
    

    然后在你完成后将这个字典与生成的字典结合起来以获得你需要的信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-16
      • 2022-12-08
      • 2014-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多