У меня есть вычислительно дорогой цикл, чтобы пройти через Python. В общем, я зацикливаю около 2 миллионов раз, и каждый раз добавляю новый ключ к растущему словарю со списком в качестве значения. Т.е.,Python/Cython добавление словаря является узким местом
for i in xrange(600):
d = {}
for i in xrange(3200):
# execute some logic
...
# add to dict
new_key = "some-str"
d[new_key] = [0.0, 1.0, 2.0]
# do some other stuff
...
Я профилированный свой код, и операция, при которой я добавляю новый список ключ + в словарь является огромным препятствием. Эта единственная операция занимает ~ 18% от времени выполнения на 1e-06
секунд за операцию.
Есть ли способ ускорить эту операцию в Cython/Python? Я попытался изменить d
на defaultdict, но это было медленнее. Я также пробовал различные операции с списком, такие как .extend
, но приведенная выше реализация - это самый быстрый подход, который я смог найти.
Я могу предложить вам использовать кортеж вместо списка 'd [new_key] = (0.0, 1.0, 2.0,)' потому что tuple неизменный сборщик мусора не будет отслеживать его, и это может улучшить вашу скорость – latsha
'cython' still должен использовать вызовы Python для добавления в словарь. Не ходите по этому маршруту только из-за этой операции. – hpaulj
Спасибо за комментарии. @hpaulj, что было бы лучшей структурой данных для хранения этих данных? – deef