如何在Numpy矩阵运算中保持gmpy2 mpfr的精度

时间:2015-04-17 00:58:55

标签: python numpy matrix multiprecision gmpy

我在Numpy矩阵中使用多精度Rational(mpfr)对象,

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的精度? 任何建议将不胜感激!

1 个答案:

答案 0 :(得分:0)

出于性能原因,numpy使用LAPACK库并且必须将矩阵元素转换为标准double类型。您可能希望尝试mpmath进行多次精确矩阵求逆。