Как заставить функцию mpmath возвращать python float?

Я хотел бы преобразовать функцию mpmath в функцию, которая может работать с массивами numpy. Скажем, у меня есть, например, следующее

A=np.linspace(0,1,100)
besseli_vec = numpy.frompyfunc(mpmath.besseli, 2, 1)
Y=besseli_vec(0, A)

Однако теперь значения в массиве A относятся к типу mpmath mpf. Итак, каков самый быстрый/лучший способ взять функцию в mpmath и преобразовать ее в функцию, которая может работать с массивами numpy, но возвращает стандартное число с плавающей запятой, а не число с плавающей запятой mpmath? Или просто преобразовать массив mpf в numpy float? функция float() работает для преобразования чисел, но не массивов.


person Jonathan Lindgren    schedule 09.02.2015    source источник


Ответы (1)


besseli_vec = numpy.frompyfunc(lambda *a: float(mpmath.besseli(*a)), 2, 1)

должен сделать это. Вычисление mpmath, вероятно, будет намного медленнее, чем лямбда, поэтому влияние на скорость, вероятно, будет примерно связано с преобразованием с плавающей запятой.

person pv.    schedule 09.02.2015
comment
Спасибо, но я не уверен, что понял ваш ответ. Будет ли преобразование с плавающей запятой значительно изменять скорость по сравнению с оценкой только функции mpmath? - person Jonathan Lindgren; 09.02.2015
comment
Скорее всего, его влияние на скорость мизерно, и вам в любом случае нужно будет это сделать, если вы хотите плавать из mpf-объектов. (Поскольку массивы Numpy не знают об объектах mpf, они не могут ускорить эти операции.) - person pv.; 09.02.2015