Python Numba:将numpy数组转换为可哈希对象

Python Numba:将numpy数组转换为可哈希对象,python,numba,Python,Numba,在numba.jit(nopython=True)函数中,我正在计算数千个numpy数组(1-D,整数数据类型),并将它们附加到列表中。问题是有些数组看起来相等,但我不需要重复。因此,我需要一种有效的方法来检查列表中是否已经存在新数组 在python中,可以这样做: import numpy as np import numba as nb # @nb.jit(nopython=True) def foo(n): uniques = [] uniques_set = set(

在numba
.jit(nopython=True)
函数中,我正在计算数千个numpy数组(1-D,整数数据类型),并将它们附加到列表中。问题是有些数组看起来相等,但我不需要重复。因此,我需要一种有效的方法来检查列表中是否已经存在新数组

在python中,可以这样做:

import numpy as np
import numba as nb

# @nb.jit(nopython=True)
def foo(n):

    uniques = []
    uniques_set = set()

    for _ in range(n):

        arr = np.random.randint(0, 2, 2)
        arr_hashable = make_hashable(arr)

        if not arr_hashable in uniques_set:
            uniques_set.add(arr_hashable)
            uniques.append(arr)

    return uniques
我尝试了两种方法来解决这个问题:

  • 将数组转换为元组并将元组放入集合中

    def make_hashable(arr):
        return tuple(arr)
    
    但不幸的是,直接元组构造在nopython中不能以这种方式工作 模式我也试过这样做:

    def make_hashable(arr):
        res = ()
        for n in arr:
            res += (n,)
        return res
    
    还有其他我能想到的类似的解决办法,但都失败了 nopython模式和TypeError

  • 将数组转换为字符串,并将其放入集合

    def make_hashable(arr):
        return arr.tostring()
    
    还尝试了所有可能的方法将数组转换为字符串,但看起来像麻木 目前不支持字符串转换

  • 可能有不同的方法(有效地)检查列表中是否已经存在数组?我的numba版本是0.44。非常感谢