2015-02-09 89 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類型mpf。那麼在mpmath中使用函數的最快/最好的方法是什麼,並將其轉換爲可以對numpy數組起作用的函數,但返回的是標準float而不是mpmath float?或者只是將mpf數組轉換爲numpy浮點數?函數float()用於轉換數字,但不用於數組。

回答

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

應該這樣做。 mpmath計算可能會比lambda慢得多,所以速度影響可能只是浮點轉換。

+0

謝謝,但我不知道我明白你的答案。與僅評估mpmath函數相比,浮點數轉換是否會顯着改變速度? – 2015-02-09 18:49:54

+0

它對速度的影響很可能是微不足道的,如果你想從mpf對象中獲得浮點數,你無論如何都需要這樣做。 (由於Numpy數組不知道mpf對象,因此無法加速這些操作。) – 2015-02-09 20:22:51