2012-12-06 24 views
8

私が持っている:配列をmpfする方法は?

import numpy as np 
from mpmath import * 

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

しかし、それは私がそれをやらせないであろう。

TypeError: cannot create mpf from array 

だから私は何をやるべき?

本質的には、この配列を使用して、要素ごとに状況に応じて信じられないほど大きな数または信じられないほど小さな数を掛けます(例:1.35626567e1084または6.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

@Rapid素早いgoogle検索は、まだそれが唯一の方法であることを暗示しているようです。このオプションはとてもシンプルなので理解できます。 – jorgeca

+0

私は別の設定で同じ問題を抱えており、私はこのページに自分の投稿をリンクしました。助けていただければ幸いです。 – Allan

3

チェックアウトmpmath.arange

import numpy as np 
import mpmath as mp 

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

これは私にはエラーを投げずにこの 'A = np.array(arange(600))'とそれに続く 'besseli(0、A)'を実行できませんか? – Rapid

関連する問題