.append в python очень медленный, есть ли способ улучшить его? - PullRequest
0 голосов
/ 07 ноября 2019
i = 2
feature_vector_set = []
while i < 2405 - 2:
    j = 2
    while j < 1200 - 2:
       block = diff_image[i-2:i+3, j-2:j+3]
       feature = block.flatten()
       feature_vector_set.append(feature)
       j = j+1
    i = i+1

diff_image - это int16 с формой (2405,1200), весь цикл занимает 40 минут, и в основном вызывается следующей строкой:

feature_vector_set.append(feature)

Есть ли альтернативный способ достижения того же результата?

1 Ответ

0 голосов
/ 07 ноября 2019

Если вы собираетесь добавить много элементов, список не подходит для этой структуры данных.

Попробуйте использовать deque. Он является частью коллекций Python, он использует двусвязный список для внутреннего использования.

from collections import deque

i = 2
feature_vector_set = deque()
while i < 2405 - 2:
   j = 2
   while j < 1200 - 2:
       block = diff_image[i-2:i+3, j-2:j+3]
       feature = block.flatten()
       feature_vector_set.append(feature)
       j = j+1
   i = I+1
feature_vector_list = list(feature_vector_set)

Вы можете найти временные сложности общих операций над типами данных Python здесь

Документация Deque

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