Почему это медленнее? - PullRequest
       2

Почему это медленнее?

0 голосов
/ 14 декабря 2018

У меня есть фрагмент кода Python, который я пытался оптимизировать, но при этом он фактически замедлился в 4 раза. Я понятия не имею, почему.

def q_iteration(self, n:int):
    """Runs q_iteration on the state grid. raw_grid will not be affected"""
    for i in range(n):
        # Create structure to edit without affecting old data
        new_grid = copy.deepcopy(self.state_grid)
        for r in range(len(self.raw_grid)):
            for c in range(len(self.raw_grid[r])):
                new_grid[r][c].update_v(r, c, self.state_grid)


        self.state_grid = new_grid

update_v - этоТяжелая работа и скорость работы программы становятся очень проблематичными.Я решил, что в дополнение к оптимизации update_v я изменил ссылки так, чтобы не создавать новую глубокую копию каждую итерацию.

def q_iteration(self, n:int):
    """Runs q_iteration on the state grid. raw_grid will not be affected. Resets any previous iteration"""
    # create copy to edit
    nxt = copy.deepcopy(self.state_grid)
    # create copy to reference data
    curr = self.state_grid

    # clear the current data
    for r in range(len(nxt)):
        for c in range(len(curr)):
            curr[r][c].v = 0

    # update v values
    for i in range(n):
        for r in range(len(self.raw_grid)):
            for c in range(len(self.raw_grid[r])):
                nxt[r][c].update_v(r, c, curr)
        # swap references to overwrite current next iteration
        curr, nxt = nxt, curr

    # set the reference back into the data
    self.state_grid = curr

Что не имеет для меня никакого смысла, так это почемуне создание глубокой копии на самом деле медленнее ?Может кто-нибудь объяснить это?

Редактировать: вот update_v

https://pastebin.com/cS2T8Z5t

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