Портирую одну свою программу с octave на python с целью использования арифметики произвольной точности — хочу статью написать :)
Использую библиотеку mpmath версии 0.19-1 поверх gmpy, которая, судя по документации, устарела и ныне заменяется на gmpy2. Последнюю проверить не могу, не превращая свою систему в слаку, посему прошу помощи ЛОРа по бенчмаркингу mpmath-0.19-1/gmpy2
Код: диагонализация матрицы коэффициентов полинома Чебышева, с.з. — корни (n+1)-ого чебышевского полинома, которые известны аналитически, а i-ое с.ф. — значения i-го полинома на этих корнях.
Вот мой говнокод:
#!/usr/bin/env python
import numpy as np
from mpmath import *
mp.dps=20
def Tpol(n):
if n > 1:
C = np.diag([1]*(n-1), 1) + np.diag([1]*(n-1), -1)
C[0,1] = 2
C = mp.matrix(C)/2
xj, Tx = mp.eig(C)
return (Tx, C, xj)
Tx, C, xj = Tpol(50)
#print C * Tx[:,3] - xj[3] * Tx[:,3]
print libmp.BACKEND
#n = 5
#print [mp.cos((2*k+1)*mp.pi/2/n) for k in range(n)]
Кому не вломы, прогоните его и запостите вывод. Если укажете процессор/архитектуру будет ещё лучше, но поскольку меня интересуют порядки величины. Вот мой результат:
$ time ./tpol.py
gmpy
real 0m50.810s
user 0m50.787s
sys 0m0.012s
Как я говорил, интересует скорость с бэкэндом gmpy2
benchmark, gmpy, gmpy2, mpmath, python