Numpy的搜索速度是否比Python 3中的Set / Dictionary慢?

时间:2018-07-06 07:23:59

标签: python python-3.x performance numpy lookup

我想在数组中查找向量。该数组由三维向量组成。如果找不到,我想获取一个布尔值

对于Python 3中的set / dictionary,代码如下所示,

class Unit(object):
    def __init__(self, idx_vertex1, idx_vertex2, weight):
        self._idx_vertex1 = idx_vertex1
        self._idx_vertex2 = idx_vertex2

    def __eq__(self, that):
        if not isinstance(that, Edge):
            return False
        info_that = that.get_info()
        return (self._idx_vertex1 == info_that[0] 
                and self._idx_vertex2 == info_that[1])

    def __hash__(self):
        idx_sort = sorted([self._idx_vertex1, self._idx_vertex2])
        return ((idx_sort[0]+idx_sort[1])*(idx_sort[0]+idx_sort[1]+1)//2
            +idx_sort[1])

    def get_info(self):
        return [self._idx_vertex1, self._idx_vertex2]

    def main():
        units = set()
        for elem in random.sample(range(3070055), 3070055):
            units.add(Unit(elem, elem+1, 3))

对于Numpy,代码似乎更简单

test_np = np.random.randint(3070055, size=(3070055, 3))

但是,在速度上,两者有很大的不同:

>>>if Unit(44, 45, 5) in units:
...       return True
Lookup CPU Time: 0.00010633468627929688
>>>np.isin([303,5,822],test_np)
Lookup CPU Time: 1.5214931964874268

反正还有要提高Numpy的性能吗?谢谢!

0 个答案:

没有答案