Мы делаем некоторые реализации kNN
и SVD
в Python. Другие выбрали Java. Наши времена исполнения очень разные. Я использовал cProfile, чтобы увидеть, где я делаю ошибки, но на самом деле все довольно fine. Да, я также использую 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
, если я правильно его использую?