Я делаю расчет перестановок вещей из генератора, созданного itertools. У меня есть кусок кода в этой форме (это фиктивный пример):
import itertools
import pandas as pd
combos = itertools.permutations('abcdefghi',2)
results = []
i=0
for combo in combos:
i+=1 #this line is actually other stuff that's expensive
results.append([combo[0]+'-'+combo[1],i])
rdf = pd.DataFrame(results, columns=['combo','value'])
За исключением реального кода,
- есть несколько сотен тысяч перестановок
- вместо
i+=1
Я открываю файлы и получаю результаты clf.predict
, где clf
- классификатор, обученный scikit-learn
- вместо
i
Я сохраняю значение из этого прогноза
Я думаю, что combo[0]+'-'+combo[1]
тривиально.
Это занимает слишком много времени. Что я должен сделать, чтобы сделать это быстрее? Такие как:
1) написание лучшего кода (возможно, я должен инициализировать results
правильной длиной вместо использования append
, но сколько это поможет? И как лучше всего это сделать, если я не знаю длину до итерация по combs
?)
2) инициализация кадра данных pandas вместо списка и использование apply
?
3) использование cython в пандах? Всего новичков в этом.
4) распараллеливание ? Я думаю, что мне, вероятно, нужно сделать это, но опять же, абсолютный новичок, и я не знаю, лучше ли это делать в списке или в панде. Я понимаю, что мне нужно перебрать генератор и инициализировать некоторый контейнер перед распараллеливанием .
Какая комбинация этих опций была бы наилучшей и как я могу собрать ее вместе?