我有下面的函数来求两个矩形的交点。它有点慢,我不知道是因为OR
条件还是>, <
运算符。我想知道是否有办法提高is_intersect()
函数的性能。也许是跟NumPy?还是赛顿
import numpy as np
def is_intersect(rect1, rect2):
xmin1, xmax1, ymin1, ymax1 = rect1
xmin2, xmax2, ymin2, ymax2 = rect2
if xmin1 > xmax2 or xmax1 < xmin2:
return False
if ymin1 > ymax2 or ymax1 < ymax2:
return False
return True
N_ELEMS = 100000000
rects1 = np.random.rand(N_ELEMS,4)
rects2 = np.random.rand(N_ELEMS,4)
temp_dct = dict()
for i in range(N_ELEMS):
rect1 = rects1[i,:]
rect2 = rects2[i,:]
if is_intersect(rect1, rect2):
temp_dct[i] = True
我不能从缓存结果中获益,因为点将是增量的,也就是说,一个矩形将在空间中移动(从不在同一个位置)。在本例中,我使用了NumPy的random()
函数,但实际使用情况并非如此。我将调用is_intersect()
函数100000次或更多次
您可以通过使用矢量化比较和
np.any
避免for循环来提高性能:您没有字典,但可以通过索引访问
result
100米元素的性能:
相关问题 更多 >
编程相关推荐