Взаимодействие между Numpy и MpMath в Python

У меня есть массив numpy A с элементами mpf с десятичной точностью 100. Отбрасывается ли эта точность, если я решу взять с собой точечный продукт numpy A?

Если это так, есть ли способ преобразовать массив numpy в матрицу mpmath, чтобы я мог сохранить точность?


person Jing    schedule 01.03.2014    source источник
comment
Сомневаюсь, что это вызовет проблемы. dot отлично работает, когда я тестирую его с массивами, полными экземпляров fractions.Fraction, поэтому он, вероятно, вызовет соответствующие методы mpmath, не пытаясь преобразовать их в число с плавающей запятой. Я рекомендую попробовать.   -  person user2357112 supports Monica    schedule 01.03.2014
comment
Спасибо :) Я пытался найти документацию о том, какие операции numpy хорошо работают с mpmath, но, к сожалению, пока безуспешно :(   -  person Jing    schedule 01.03.2014


Ответы (1)


Массивы Numpy могут содержать объекты, в частности объекты mpf, а их методы, такие как dot, могут использовать методы сложения/умножения этих объектов. Пример:

import mpmath
import numpy
mpmath.mp.dps = 25     # higher precision for demonstration
a = [mpmath.sin(mpmath.pi*n/3) for n in range(99)]
b = numpy.array(a)
b.dot(b)

выходы mpf('49.50000000000000000000000165')

Для сравнения, вот что происходит, если элементы массива приводятся к числам с двойной точностью при преобразовании в numpy:

c = numpy.array(a, dtype=float)
c.dot(c)

выходы 49.499999999999993. Таким образом, более высокая точность, обеспечиваемая mpmath, сохраняется при вызове метода точки в первой версии.

person Community    schedule 24.04.2016