Почему Python настолько медленный для простого цикла for?

Мы делаем некоторые реализации 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 , если я использую его правильно?

43
задан Eric Leschinski 26 April 2015 в 01:26
поделиться