2015-02-09 4 views
1

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

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

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

ответ

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

должен это сделать. Расчет mpmath, вероятно, будет намного медленнее, чем лямбда, поэтому влияние скорости будет, по-видимому, примерно равным конверсии поплавка.

+0

Спасибо, но я не уверен, что понимаю ваш ответ. Будет ли изменение поплавка существенно изменяться по сравнению с оценкой только функции mpmath? –

+0

Скорее всего, его влияние на скорость незначительно, и в любом случае вам нужно будет это сделать, если вы хотите поплавки из объектов mpf. (Поскольку массивы Numpy не знают о объектах mpf, они не могут ускорить эти операции.) –

Смежные вопросы