2012-12-06 40 views
8

我:如何mpf數組?

import numpy as np 
from mpmath import * 

mpf(np.array(range(0,600))) 

但它不會讓我這樣做:

TypeError: cannot create mpf from array 

所以,我應該怎麼做?

本質上,我將使用這個數組,並根據情況(例如1.35626567e10846.2345252e-2732)乘以一個令人難以置信的大數或不可思議的小數字,因此需要mpf。

更具體地說,我將使用besseli和besselk函數來創建令人難以置信的大而難以置信的小值。

如何獲得一個mpf數組來保存這些數字?

回答

11

由MPF數乘以陣列只是工作:

import numpy as np 
import mpmath as mp 
small_number = mp.besseli(400, 2) # This is an mpf number 
# Note that creating a list using `range` and then converting it 
# to an array is not very efficient. Do this instead: 
A = np.arange(600) 
result = small_number * A # Array of dtype object, ie, it contains mpf numbeers 

乘法逐元素含有MPF號碼兩個陣列也可以工作:

result * result 

所以你真正的問題是如何評估numpy數組中的mpmath函數。要做到這一點,我會使用np.frompyfunc(前一段時間這是唯一的選擇)。

besseli_vec = np.frompyfunc(mp.besseli, 2, 1) 
besseli_vec(0, A) 
+0

非常感謝。我正要放棄並使用呆滯循環!你提到這是前段時間的唯一選擇,現在有哪些其他選擇? – Rapid

+3

@快速快速谷歌搜索似乎暗示,它仍然是唯一的方法。這是可以理解的,因爲這個選項非常簡單。 – jorgeca

+0

我在不同的設置中遇到同樣的問題,我只是將我的帖子鏈接到此頁面。希望得到任何幫助, – Allan

3

退房mpmath.arange

import numpy as np 
import mpmath as mp 

np.array(mp.arange(600)) 
+0

我仍然無法做到這一點'A = np.array(人氣指數(600))'之後'BESSELI(0,A)'沒有它我扔的錯誤? – Rapid