Скорость поиска Numpy ниже, чем Set / Dictionary в Python 3? - PullRequest
0 голосов
/ 06 июля 2018

Я хотел бы найти вектор в массиве. Массив состоит из трехмерных векторов. Я хотел бы получить логическое значение, если я его найду или нет

Для набора / словаря в Python 3 код подобен приведенному ниже,

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? Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...