2015-11-22 3 views
-4

Здравствуйте, я написал код в Python, используя mpmath, произвольной точности математике модуль:скорость Улучшение моего mpmath кода

from __future__ import division 
from numpy import arctan, sin, absolute, log10 
from mpmath import * 
import time 
imax = 1000001 
x = mpf(0) 
y = mpf(0) 
z = mpf(0) 
t = mpf(0) 
u = mpf(0) 
i = 1 
mp.prec = 128 
start_time = time.time() 
while i < 1000001: 
    i += 1 
    x = mpf(x + 1) 
    y = mpf(y + x * x) 
    z = mpf(z + sin(y)) 
    t = mpf(t + absolute(z)) 
    u = mpf(u + log10(t)) 

print("--- %s seconds ---" % (time.time() - start_time)) 
print x 
print y 
print z 
print t 
print u 

потребовалось около 87 секунд, чтобы распечатать результаты. Как я могу улучшить этот код? Мой друг в Фортране написал подобную программу, и для распечатки результатов потребовалось всего 3,14 секунды.

+1

Hi. Существует веб-сайт SE для обзора кода, который более подходит для такого типа вопросов: https://codereview.stackexchange.com – dietbacon

+0

Fortran примерно так же быстро, как и Pi – rolfl

+1

Также вопрос очень плохо написан. Вы должны хотя бы объяснить, что ваша цель с кодом, вместо того, чтобы нас угадывать. – dietbacon

ответ

0

Что-то, что потерялось в комментариях, это код использует модуль mpmath. * импорта, затеняет тот факт, все вычисления используют специальные функции из этого модуля:

from mpmath import * 
mpf(x + 1) 

mpmath является свободным (BSD лицензионного) библиотека Python для действительной и комплексной арифметики с плавающей точкой с произвольной точностью

Все впечатления, которые пользователи numpy имеют о скорости, а также способы ускорения кода numpy, не имеют значения. Есть 2,9 тыс. Последователей тега numpy, 0 подписчиков тега mpmath. Хуже еще хуже.

Что касается сравнения Fortran, вы даже не указываете, какой пакет mp math использует ваш друг. Скомпилированный код Fortran всегда будет быстрее, чем код Python, хотя хорошее использование «векторизации» numpy может уменьшить разницу в скорости. Но этот пример кода не пытается использовать какой-либо из этих трюков numpy (даже если они возможны с mpmath). Он просто делает вычисления на одиночных числах, а не на массивах.

Существует список групп google для mpmath вопросов. Я бы предложил использовать это.

=========================

Так кто знаком с расширенными расчетов точностью ответил на ваш вопрос CR.

Смежные вопросы