2012-12-06 16 views
8

mam:Jak uzyskać tablicę mpf?

import numpy as np 
from mpmath import * 

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

Ale to nie pozwoli mi zrobić:

TypeError: cannot create mpf from array 

Więc co mam robić?

Zasadniczo zamierzam użyć tej tablicy i pomnożyć elementy z niewiarygodnie dużą lub niewiarygodną małą liczbą w zależności od okoliczności (np. 1.35626567e1084 lub 6.2345252e-2732), stąd potrzeba mpf.

Dokładniej użyję funkcji besseli i besselk, które stworzą niesamowite duże i niewiarygodne małe wartości.

Jak uzyskać tablicę mpf do przechowywania tych liczb?

Odpowiedz

11

Mnożąc tablicę numerem MPF prostu działa:

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 

Mnożąc elementem mądry dwie tablice zawierające numery MPF działa również:

result * result 

Twój prawdziwy problem polega więc na ocenie funkcji mpmath w tablicy numpy. Aby to zrobić, użyłbym np.frompyfunc (jakiś czas temu była to jedyna opcja).

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

Dziękuję bardzo. Właśnie miałem się poddać i używać leniwego do pętli! Wspomniałeś, że była to jedyna opcja jakiś czas temu, jakie są inne opcje w dzisiejszych czasach? – Rapid

+3

@Rapid Szybkie wyszukiwanie w Google wydaje się sugerować, że nadal jest to jedyny sposób. Jest to zrozumiałe, ponieważ ta opcja jest tak prosta. – jorgeca

+0

Mam ten sam problem w innym ustawieniu i po prostu połączyłem mój wpis z tą stroną. Byłbym wdzięczny za każdą pomoc, – Allan

3

Wyjazd mpmath.arange:

import numpy as np 
import mpmath as mp 

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

Nadal nie mogę tego zrobić 'A = np.array (arange (600))' po którym następuje 'besseli (0, A)' bez rzucania we mnie błędów? – Rapid

Powiązane problemy