我想在数组中查找向量。该数组由三维向量组成。如果找不到,我想获取一个布尔值
对于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的性能吗?谢谢!