Мы делаем некоторые реализации kNN
и SVD
на Python. Остальные выбрали Java. Наши сроки исполнения очень разные. Я использовал cProfile, чтобы увидеть, где я делаю ошибки, но на самом деле все в порядке . Да, я также использую numpy
. Но я хотел бы задать простой вопрос.
total = 0.0
for i in range(9999): # xrange is slower according
for j in range(1, 9999): #to my test but more memory-friendly.
total += (i / j)
print total
Этот фрагмент занимает 31,40 секунды на моем компьютере.
Java-версия этого кода занимает 1 секунду или меньше на том же компьютере. Полагаю, основная проблема для этого кода - проверка типов. Но я должен проделать много таких операций для своего проекта, и я думаю, что 9999 * 9999 - не такое уж большое число.
Я думаю, что делаю ошибки, потому что знаю, что Python используется во многих научных проектах. Но почему этот код такой медленный и как я могу справиться с проблемами большего размера?
Следует ли мне использовать JIT-компилятор, такой как Psyco
?
Я также говорю, что проблема с этим циклом это только пример. Код не так прост, как этот, и может быть сложно применить на практике ваши улучшения / образцы кода.
Другой вопрос: могу ли я реализовать множество алгоритмов интеллектуального анализа данных и машинного обучения с numpy
и scipy
, если я использую его правильно?