У меня проблема с производительностью на Python. В нижеприведенном фрагменте есть 4 вложенных цикла, повторяющихся над OrderedDict, matrix_col, который содержит 11000 элементов. Другая итерация проходит через defaultdict, trans, который также имеет ~ 11000 элементов в нем. Выполнение этого процесса занимает слишком много времени. Я ценю, если кто-нибудь может посоветовать, как улучшить производительность.Ошибка производительности на Python
import string
from collections import namedtuple
from collections import defaultdict
from collections import OrderedDict
import time
trans = defaultdict(dict)
...
matrix_col = OrderedDict(sorted(matrix_col.items(), key=lambda t: t[0]))
trans_mat = []
counter = 0
for u1, v1 in matrix_col.items():
print counter, time.ctime()
for u2, v2 in matrix_col.items():
flag = True
for w1 in trans.keys():
for w2, c in trans[u1].items():
if u1 == str(w1) and u2 == str(w2):
trans_mat.append([c])
flag = False
if flag:
trans_mat.append([0])
trans_mat = np.asarray(trans_mat)
trans_mat = np.reshape(trans_mat, (11000, 11000))
Вот его текущее представление. Это в основном обработка 2 штук в минуту. С такой скоростью он будет принимать более 5 дней, чтобы сформировать матрицу, trans_mat:
0 Tue Oct 6 11:31:18 2015
1 Tue Oct 6 11:31:46 2015
2 Tue Oct 6 11:32:19 2015
3 Tue Oct 6 11:32:52 2015
4 Tue Oct 6 11:33:19 2015
5 Tue Oct 6 11:33:46 2015
Так почему же вы зацикливание на все ключи в 'trans' и все элементы в' trans [u1] ', когда вы могли бы просто * проверить * для' u1' и 'u2' являющихся ключами в словарях' trans' и 'trans [u1]'? –
Можете ли вы предоставить образец данных и что происходит в этом многоточии? –
Привет, Martijn, как мне получить значение «c» на последнем шаге, если я не перебираю ** trans [u1] .items() **? –