2015-04-17 2 views
0

Я использую несколько точности Rationals (MPFR) объект в матрице Numpy,Как сохранить точность gmpy2 MPFR в матричной операции Numpy

matrix([[ mpfr('-366998.93593422093364191959435957721088073331222596080623233278164906447646654043966366647797',300), 
    mpfr('-366997.28868432286431885359868309613943011772698563764930700121744888472828510537502286003536',300), 
    mpfr('-366997.28868432286431885359868309613943011772698563764930700121744888472828510537502286003536',300), 
    mpfr('-366997.28868432286431885359868309613943011772698563764930700121744888472828510537502310955189',300), 
    mpfr('-366997.33936304224917822062156336656390364691713762458391131405889211470102834400572590888586',300), 
    mpfr('-366997.28868432286431885359868309613943011772698563764930700121744888472828510537502286003536',300)], 
    [ mpfr('-40813927.104656436832435886099653290386078894027773129049451436960078610548203287954114434382',300), 
    mpfr('-10418349883335.380900703935580692318458974868691020694148304775624032110383967472053357462067',300), 
    mpfr('-40813927.104656436832435886099653290386078894027773129049451436960078610548203287954114434382',300), 
    mpfr('-40813927.104656436832435886099653290386078894027773129049451436960078610548203287954114434382',300), 
    mpfr('-40813927.104656436832435886099653290386078894027773129049451436960078610548203287954114434382',300), 
    mpfr('-40813927.104656436832435886099653290386078894027773129049451436960078610548203287954114434382',300)]], dtype=object) 

но когда вычисления обратной матрицы, я потеряю точность ,

In [10]: a.I 
Out[10]: 
matrix([[ -5.44966727e-07, 1.91970239e-14], 
     [ 1.06745086e-11, -9.59848660e-14], 
     [ -5.44964281e-07, 1.91969377e-14], 
     [ -5.44964281e-07, 1.91969377e-14], 
     [ -5.44964356e-07, 1.91969404e-14], 
     [ -5.44964281e-07, 1.91969377e-14]]) 

Как сохранить точность mpfr? Любое предложение будет оценено!

ответ

0

По соображениям производительности numpy использует библиотеки LAPACK и должен преобразовывать матричные элементы в стандартный тип double. Вы можете попробовать mpmath для инверсии матрицы с несколькими точками.

+0

Есть ли способ использовать mpfr в Numpy? Поскольку операция матрицы в mpmath медленнее, чем операция numpy. и я также хочу сохранить точность. Спасибо – PytLab

+0

@PytLab Причина, по которой numpy быстрее, заключается в том, что она использует типы с плавающей точкой, которые реализованы в аппаратном обеспечении. Они имеют фиксированную точность, но очень быстрые. Как только вы начнете использовать арифметику произвольной точности, производительность будет медленнее. – casevh