Вы можете улучшить производительность, избегая for l oop, используя векторизованное сравнение и np.any
:
result = (1 - np.any([rects1[:,0] > rects2[:,1],
rects1[:,1] < rects2[:,0],
rects1[:,2] > rects2[:,3],
rects1[:,3] < rects2[:,2]],
axis=0)).astype(bool)
У вас нет словаря, но вы можете получить доступ к result
по индексу.
Производительность с элементами 100M:
import numpy as np
import timeit
N_ELEMS = 100_000_000
rects1 = np.random.rand(N_ELEMS,4)
rects2 = np.random.rand(N_ELEMS,4)
start_time = timeit.default_timer()
result = (1 - np.any([rects1[:,0] > rects2[:,1],
rects1[:,1] < rects2[:,0],
rects1[:,2] > rects2[:,3],
rects1[:,3] < rects2[:,2]],
axis=0)).astype(bool)
print(timeit.default_timer() - start_time)
2.9162093999999996