2012-12-06 32 views
8

ho:Come mpf un array?

import numpy as np 
from mpmath import * 

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

Ma non mi permette di farlo:

TypeError: cannot create mpf from array 

Allora, cosa dovrei fare?

In sostanza ho intenzione di utilizzare questo array e moltiplicare l'elemento in base a un numero incredibilmente grande o incredibile a seconda delle circostanze (ad esempio 1.35626567e1084 o 6.2345252e-2732), quindi la necessità di mpf.

In particolare userò la funzione bessel e besselk che creano incredibili valori grandi e incredibili.

Come si ottiene un array mpf per contenere questi numeri?

risposta

11

Moltiplicando una matrice da un numero MPF funziona:

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 

Moltiplicando elemento-wise due matrici contenenti numeri MPF funziona anche:

result * result 

Quindi il tuo vero problema è come valutare una funzione mpmath in una matrice numpy. Per farlo, userei np.frompyfunc (qualche tempo fa questa era l'unica opzione).

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

Grazie mille. Stavo per arrendermi e usare lenti per i loop! Hai detto che questa era l'unica opzione qualche tempo fa, quali sono le altre opzioni al giorno d'oggi? – Rapid

+3

@ Rapid Una ricerca rapida su Google sembra implicare che sia ancora l'unico modo. È comprensibile dal momento che questa opzione è così semplice. – jorgeca

+0

Ho lo stesso problema in un'impostazione diversa e ho solo collegato il mio post a questa pagina. Gradirei qualsiasi aiuto, – Allan

3

Partenza mpmath.arange:

import numpy as np 
import mpmath as mp 

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

non riesco ancora a fare questo 'A = np.array (arange (600))' seguito da 'BESSEL.I (0, A)' senza gettare errori contro di me? – Rapid