change double for loop to list comprehension for upgrading speed
#21
by
changgyu
- opened
import timeit
class DummyConfig:
def __init__(self, max_num_grids=10, use_1x1_grid=False, anyres=True):
self.max_num_grids = max_num_grids
self.use_1x1_grid = use_1x1_grid
self.anyres = anyres
config = DummyConfig()
def original_version():
possible_resolutions = []
if config.anyres:
assert config.max_num_grids > 0
for i in range(1, config.max_num_grids + 1):
for j in range(1, config.max_num_grids + 1):
if i == 1 and j == 1 and not config.use_1x1_grid:
continue
if i * j <= config.max_num_grids:
possible_resolutions.append([i, j])
return possible_resolutions
def list_comprehension_version():
possible_resolutions = []
if config.anyres:
assert config.max_num_grids > 0
possible_resolutions = [
[i, j]
for i in range(1, config.max_num_grids + 1)
for j in range(1, (config.max_num_grids // i) + 1)
if not (i == 1 and j == 1 and not config.use_1x1_grid)
]
return possible_resolutions
# 측정
print("original_version:", timeit.timeit(original_version, number=10000))
print("list_comprehension_version:", timeit.timeit(list_comprehension_version, number=10000))
# original_version: 0.19971796300001188 0.10782223799999713
# list_comprehension_version: 0.15134139399999924 0.0473939370000096
timeit을 사용해 두 코드의 성능 비교를 했을때 list_comprehension쪽이 더 빠르며 이론적으로도 더 빠른것으로 알고 있습니다. grid 설정으로 적절한 해상도 목록을 반환하는데 시간을 줄일 수 있습니다.